)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4c8fb9931c141a7f4745c407bfb29c54e4b1db63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e2768e8d_00332e51","updated":"2026-05-05 17:27:11.000000000","message":"Addressed some of the bot\u0027s comments and fixed the tox-pep8 error. However, I\u0027m still not able to make this test green locally. Looks like an error on pyflake rather than on the documentation itself. Let\u0027s see.","commit_id":"97bc455a15d3741df0270ba13143a833326b6a78"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"633ed6c6_d1fdb034","updated":"2026-06-30 18:31:38.000000000","message":"-1: still missing some important clarifications and sections that are missing content","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ccb18b53_9240eb2e","updated":"2026-07-01 13:19:30.000000000","message":"Thanks for your changes, I think the new spec is much more clear. Just adding some notes.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"178d1d47_5bf3fb8a","updated":"2026-07-01 13:47:58.000000000","message":"just cleanign up old comemnt will move to a full revew next\n\nwhen you upload a new revsion you should mark the resven comment as resolved as you go unless you explcity waiting on feedback or the comment still need to be adressed","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5d20843d_568458a4","updated":"2026-07-01 19:12:48.000000000","message":"I think that in general we agreed with the proposal, we just need to fix some typos and maybe simplify some parts. But in general looks good!","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"652e431c61c103a4ce0a159a614204bb46a9a6c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"cb1c104d_e439d6bf","updated":"2026-07-02 12:26:00.000000000","message":"I think that we agree with the solution, there are some specific points that may be easy just to remove for this initial implementation, other than continuing to refine it.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ef3fb6c9b77a44987e7de6295e094f6a254c35d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"15fb74f1_9bb498a6","updated":"2026-07-02 07:03:52.000000000","message":"I think this is in good shape to be merged. I\u0027m just +1 to leave other cores to +2 as they have been following this proposal closer but i can promote to+2.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7f05cc62c3ff1f5fabf8f86cbf25099cacaf3b2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c38d69a7_0b0a8565","updated":"2026-07-07 14:51:01.000000000","message":"I think that so minor details are missing and some thread to be closed.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c143f4deda2b2607e933ccce769857ba0528a9a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b568116e_e349b113","updated":"2026-07-06 10:26:33.000000000","message":"the proposal looks good to me","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"ff17ea8ee6ee3146feec2af87c203d8bdbac1d56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"cc97e80a_df67802c","updated":"2026-07-10 12:52:47.000000000","message":"We agreed with most of the discussions here and we agreed with the main proposal, but we still miss some other implementation details like CDM and collector changes.  We could work with a follow up for this spec in the following weeks to solve this open issues, while the assignee works with the implementation too.\nTHanks for the updates.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"a050671887ed36df7ff2a317f1ccb8aacdd8cacd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"c9b113ca_16f2b704","updated":"2026-07-08 09:04:03.000000000","message":"readding vote","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"84b97c2d_7fc90347","updated":"2026-07-09 19:46:12.000000000","message":"there are still a few issue but it think this is ok to merge, we may want to have a follow up to refien it slightly but i woudl be ok with proceeding to the implementation","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"}],"specs/2026.2/approved/preemptible-instances.rst":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"add6add2698439f31e2253c793f029965f9207ff","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":71,"context_line":"feature, we will need a new goal."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The idea of this goal is **maximise the usage of the spare capacity**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Also add a new strategy, **preempt_instances**. Its functionality is"},{"line_number":76,"context_line":"described below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa1c931c_c0faa3b5","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":70},"updated":"2026-05-28 19:54:34.000000000","message":"So the Watcher goal is really to free compute resources in use by preemptible instances.","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7a0cf483e055f0d16117469a1d940069b1363374","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":71,"context_line":"feature, we will need a new goal."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The idea of this goal is **maximise the usage of the spare capacity**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Also add a new strategy, **preempt_instances**. Its functionality is"},{"line_number":76,"context_line":"described below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ca4a2de_eafa2935","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":70},"in_reply_to":"16d1af3f_e2b9a5e1","updated":"2026-06-22 14:20:12.000000000","message":"Done","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"da375e12bb7febf395552276acfd83ba5fd89361","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":71,"context_line":"feature, we will need a new goal."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The idea of this goal is **maximise the usage of the spare capacity**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Also add a new strategy, **preempt_instances**. Its functionality is"},{"line_number":76,"context_line":"described below."}],"source_content_type":"text/x-rst","patch_set":3,"id":"16d1af3f_e2b9a5e1","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":70},"in_reply_to":"fa1c931c_c0faa3b5","updated":"2026-05-29 22:17:10.000000000","message":"Yeah. This makes more sense indeed. This goal was annoying me because there is also a use case when you just want to prioritize some workloads, and not strictly use the spare capacity.\n\nThanks for the hint.","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"add6add2698439f31e2253c793f029965f9207ff","unresolved":true,"context_lines":[{"line_number":82,"context_line":"workload needs to run. Then, Watcher will apply an algorithm against"},{"line_number":83,"context_line":"one or a set of VMs and choose what is the best instance to be"},{"line_number":84,"context_line":"preempted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The used heuristic to determine which are the \"best instances\" will be"},{"line_number":87,"context_line":"passed as an argument to the strategy. As an initial implementation, a"},{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"a2f6ef90_85a4f288","line":89,"range":{"start_line":85,"start_character":0,"end_line":89,"end_character":9},"updated":"2026-05-28 19:54:34.000000000","message":"We need to think how this would work from user point of view. What kind of request will be made? Which optimization we would like to achieve? When the strategy evaluates ComputeNode instances, what would be the optimization target? Maybe guarantee a % of resources are free, and based on that some instances need to be preempted. Or set a maximum % of resources that can be consumed by preemptible instances and destroy the oldest ones...","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"workload needs to run. Then, Watcher will apply an algorithm against"},{"line_number":83,"context_line":"one or a set of VMs and choose what is the best instance to be"},{"line_number":84,"context_line":"preempted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The used heuristic to determine which are the \"best instances\" will be"},{"line_number":87,"context_line":"passed as an argument to the strategy. As an initial implementation, a"},{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ad9364fc_bc91e7dc","line":89,"range":{"start_line":85,"start_character":0,"end_line":89,"end_character":9},"in_reply_to":"85b4d253_566c8d9a","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"da375e12bb7febf395552276acfd83ba5fd89361","unresolved":true,"context_lines":[{"line_number":82,"context_line":"workload needs to run. Then, Watcher will apply an algorithm against"},{"line_number":83,"context_line":"one or a set of VMs and choose what is the best instance to be"},{"line_number":84,"context_line":"preempted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The used heuristic to determine which are the \"best instances\" will be"},{"line_number":87,"context_line":"passed as an argument to the strategy. As an initial implementation, a"},{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"85b4d253_566c8d9a","line":89,"range":{"start_line":85,"start_character":0,"end_line":89,"end_character":9},"in_reply_to":"a2f6ef90_85a4f288","updated":"2026-05-29 22:17:10.000000000","message":"Ack","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"add6add2698439f31e2253c793f029965f9207ff","unresolved":true,"context_lines":[{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":93,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":94,"context_line":"in-memory information. Or it can be **deleted**. The way to perform"},{"line_number":95,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":96,"context_line":"with the Nova API."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":99,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"beb53494_c55d4215","line":97,"range":{"start_line":91,"start_character":0,"end_line":97,"end_character":0},"updated":"2026-05-28 19:54:34.000000000","message":"Ack, this is interesting. We just need to make clear afterwards what needs to be configured at server creation time in Nova, and what Watcher can do with this info.","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cd0a8e50b05674b98ac4415aed1fdf78ce3638f","unresolved":true,"context_lines":[{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":93,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":94,"context_line":"in-memory information. Or it can be **deleted**. The way to perform"},{"line_number":95,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":96,"context_line":"with the Nova API."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":99,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"e9ea554b_890a2d28","line":97,"range":{"start_line":91,"start_character":0,"end_line":97,"end_character":0},"in_reply_to":"8992328f_3a45a050","updated":"2026-06-08 15:29:51.000000000","message":"Yes, we need to make clear which property is going to be used by the strategy, or if it this info is going to be provided via audit parameter. By server creation time I mean specific flavors that would be used for preemptible instances. It is possible to use resize to change the flavor of existing instances too, but since they are preemptible, they could also be destroyed and created with the proper flavor.","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"da375e12bb7febf395552276acfd83ba5fd89361","unresolved":true,"context_lines":[{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":93,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":94,"context_line":"in-memory information. Or it can be **deleted**. The way to perform"},{"line_number":95,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":96,"context_line":"with the Nova API."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":99,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"8992328f_3a45a050","line":97,"range":{"start_line":91,"start_character":0,"end_line":97,"end_character":0},"in_reply_to":"beb53494_c55d4215","updated":"2026-05-29 22:17:10.000000000","message":"Agree. I would like to discuss this.\n\nOne way that is clear in my mind is via Flavor properties, because it can be easily controlled by the operator. If we use server properties, this is mutable and the user can change it at any time (which might be an acceptable behavior in some environments). Not sure if that\u0027s a field that is immutable, and only has metadata purposes.\n\nSo I would say that nothing **needs** to be done at server creation time, but it can be done beforehand or afterwards. Does it make sense?\n\nBesides, I\u0027ll work on adding more details about these actions; what their schema are, and their pre and post conditions.","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"user can either choose between the **oldest** or the **newest**"},{"line_number":89,"context_line":"instance."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"For the sake of this specification, this strategy can follow two"},{"line_number":92,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":93,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":94,"context_line":"in-memory information. Or it can be **deleted**. The way to perform"},{"line_number":95,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":96,"context_line":"with the Nova API."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":99,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"4390a2a3_91a22032","line":97,"range":{"start_line":91,"start_character":0,"end_line":97,"end_character":0},"in_reply_to":"e9ea554b_890a2d28","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"a3fd0d6dc1ea552d85d3e1442751088ffa2a15ca"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"47ad4dc7b48aa329a9431ef66b2e90dd4e04ca6c","unresolved":true,"context_lines":[{"line_number":36,"context_line":"but this can also lead to underutilisation resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances[1][2]. That is, offer instances to use the spare"},{"line_number":40,"context_line":"capacity but they can be interrupted at any time. Currently, OpenStack"},{"line_number":41,"context_line":"does not provide any mechanism to achieve this. We can use Watcher to"},{"line_number":42,"context_line":"have this feature and leverage the decision engine based on data"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4a2a1d0f_5c94201c","line":39,"updated":"2026-06-04 15:00:21.000000000","message":"if you add an underscore after the references, the rst will actually be rendered into links which the reader can click. Check the generated html page which does not insert the links https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_3c2/openstack/3c225602613b42d9b0eabe4aef42c0db/docs/specs/2026.2/approved/preemptible-instances.html\n\n```suggestion\npreemptible instances[1]_[2]_. That is, offer instances to use the spare\n```","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"234cefe1943d18976d99b98f9ff182aa54b044f5","unresolved":true,"context_lines":[{"line_number":36,"context_line":"but this can also lead to underutilisation resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances[1][2]. That is, offer instances to use the spare"},{"line_number":40,"context_line":"capacity but they can be interrupted at any time. Currently, OpenStack"},{"line_number":41,"context_line":"does not provide any mechanism to achieve this. We can use Watcher to"},{"line_number":42,"context_line":"have this feature and leverage the decision engine based on data"}],"source_content_type":"text/x-rst","patch_set":4,"id":"cfdb3432_92efc2ca","line":39,"in_reply_to":"4a2a1d0f_5c94201c","updated":"2026-06-05 15:40:43.000000000","message":"Ack. I will give it a try and submit in the next patch set. Thanks, jgilaber.","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c384b307533f71c8c2e948f2f95154f4e1fa0980","unresolved":false,"context_lines":[{"line_number":36,"context_line":"but this can also lead to underutilisation resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances[1][2]. That is, offer instances to use the spare"},{"line_number":40,"context_line":"capacity but they can be interrupted at any time. Currently, OpenStack"},{"line_number":41,"context_line":"does not provide any mechanism to achieve this. We can use Watcher to"},{"line_number":42,"context_line":"have this feature and leverage the decision engine based on data"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7779bca0_e1c7869a","line":39,"in_reply_to":"cfdb3432_92efc2ca","updated":"2026-06-18 14:45:30.000000000","message":"it works now, thanks","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"47ad4dc7b48aa329a9431ef66b2e90dd4e04ca6c","unresolved":true,"context_lines":[{"line_number":60,"context_line":"  instance, it will preempt the CI and rerun it elsewhere when it is"},{"line_number":61,"context_line":"  possible."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* As a system managing scarce GPU resources, I’d like to prioritize"},{"line_number":64,"context_line":"  higher-value workloads by preempting lower-value tasks, so that"},{"line_number":65,"context_line":"  limited GPUs are utilized optimally and efficiently."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"c572bf80_80fe9d62","line":63,"updated":"2026-06-04 15:00:21.000000000","message":"As far as I known, Watcher can\u0027t really deal with GPU resources at the moment, so while this seems like a useful case, it might be measleading as stated","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c384b307533f71c8c2e948f2f95154f4e1fa0980","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  instance, it will preempt the CI and rerun it elsewhere when it is"},{"line_number":61,"context_line":"  possible."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* As a system managing scarce GPU resources, I’d like to prioritize"},{"line_number":64,"context_line":"  higher-value workloads by preempting lower-value tasks, so that"},{"line_number":65,"context_line":"  limited GPUs are utilized optimally and efficiently."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3e527c21_17c918f9","line":63,"in_reply_to":"af524ee9_b6703867","updated":"2026-06-18 14:45:30.000000000","message":"Done","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"234cefe1943d18976d99b98f9ff182aa54b044f5","unresolved":true,"context_lines":[{"line_number":60,"context_line":"  instance, it will preempt the CI and rerun it elsewhere when it is"},{"line_number":61,"context_line":"  possible."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* As a system managing scarce GPU resources, I’d like to prioritize"},{"line_number":64,"context_line":"  higher-value workloads by preempting lower-value tasks, so that"},{"line_number":65,"context_line":"  limited GPUs are utilized optimally and efficiently."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"af524ee9_b6703867","line":63,"in_reply_to":"c572bf80_80fe9d62","updated":"2026-06-05 15:40:43.000000000","message":"This was one of the use cases that I gathered while chatting with people in the community. But yeah, I understand the limitation and we can address this at some point in the future. I\u0027ll remove the bullet point.","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cd0a8e50b05674b98ac4415aed1fdf78ce3638f","unresolved":true,"context_lines":[{"line_number":85,"context_line":"Optimization Target"},{"line_number":86,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"The optimization objective can vary by audit mode:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* In **event-based** mode, the target is to free resources sufficient to"},{"line_number":91,"context_line":"  schedule a specific pending on-demand instance, terminating as few"}],"source_content_type":"text/x-rst","patch_set":4,"id":"57f7ec27_f02b92ea","line":88,"updated":"2026-06-08 15:29:51.000000000","message":"Not sure what you want to say here, from watcher point of view there is no difference. The same audit can be created from any of the 3 triggers. You would need to create an strategy that accepts different types of thresholds and/or specific amount of resources to be freed. Not sure if you want to extend the scope to cover both scenarios. But both would be possible using any type of Audit","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"Optimization Target"},{"line_number":86,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"The optimization objective can vary by audit mode:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* In **event-based** mode, the target is to free resources sufficient to"},{"line_number":91,"context_line":"  schedule a specific pending on-demand instance, terminating as few"}],"source_content_type":"text/x-rst","patch_set":4,"id":"b5734e20_11465097","line":88,"in_reply_to":"57f7ec27_f02b92ea","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"234cefe1943d18976d99b98f9ff182aa54b044f5","unresolved":true,"context_lines":[{"line_number":92,"context_line":"  preemptible instances as possible."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"* In **ONESHOT** and **CONTINUOUS** modes, we use a parameter"},{"line_number":95,"context_line":"  ``preemption_threshold`` (e.g. 80%, 99%) to define the resource"},{"line_number":96,"context_line":"  consumption upper-limit and the target is to bring resource"},{"line_number":97,"context_line":"  consumption below this threshold"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"01848c83_bdf88b55","line":95,"range":{"start_line":95,"start_character":28,"end_line":95,"end_character":41},"updated":"2026-06-05 15:40:43.000000000","message":"Actually, I believe it would be better to use values per resource, because using percentage we don\u0027t have a way to know which % of the infrastructure the operator is referring to. Is it 80% of the whole cluster? Is it 80% of a specific aggregate?\n\nInstead, we could have here, for example, `vcpu_threshold` and `memory_threshold`.\n\nThis way we can calculate the aggregate consumption of the spot instances by doing a search through all instances with a specific property e.g. lifecycle:preemptible_instance and sum these resources. We don\u0027t have to worry about \"scoping\"\n\nThoughts on this?","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cd0a8e50b05674b98ac4415aed1fdf78ce3638f","unresolved":true,"context_lines":[{"line_number":92,"context_line":"  preemptible instances as possible."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"* In **ONESHOT** and **CONTINUOUS** modes, we use a parameter"},{"line_number":95,"context_line":"  ``preemption_threshold`` (e.g. 80%, 99%) to define the resource"},{"line_number":96,"context_line":"  consumption upper-limit and the target is to bring resource"},{"line_number":97,"context_line":"  consumption below this threshold"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"971489d3_2ddbe2ce","line":95,"range":{"start_line":95,"start_character":28,"end_line":95,"end_character":41},"in_reply_to":"01848c83_bdf88b55","updated":"2026-06-08 15:29:51.000000000","message":"You indeed need to be more specific about the optimization that you want to reach here. The issue that you want to solve is: get more free resources for instances with higher priority (regular instances, not preemptable). So I believe that you could set a threshold for host cpu and host memory usage, and once the metrics are above any of these thresholds your algorithynm would search for preemtible instances to shutdown/destroy and free host resources. The user can use Audit Scope to select which hosts to optimize.\nThe second part of this is to select which instances (of the preemptible list) that are best candidates to destroy first.","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":92,"context_line":"  preemptible instances as possible."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"* In **ONESHOT** and **CONTINUOUS** modes, we use a parameter"},{"line_number":95,"context_line":"  ``preemption_threshold`` (e.g. 80%, 99%) to define the resource"},{"line_number":96,"context_line":"  consumption upper-limit and the target is to bring resource"},{"line_number":97,"context_line":"  consumption below this threshold"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"a9be6d00_e1a7c948","line":95,"range":{"start_line":95,"start_character":28,"end_line":95,"end_character":41},"in_reply_to":"971489d3_2ddbe2ce","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cd0a8e50b05674b98ac4415aed1fdf78ce3638f","unresolved":true,"context_lines":[{"line_number":96,"context_line":"  consumption upper-limit and the target is to bring resource"},{"line_number":97,"context_line":"  consumption below this threshold"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In all modes, the candidate selection and sorting logic (see"},{"line_number":100,"context_line":"`Candidate Selection and Sorting`_) is applied consistently."},{"line_number":101,"context_line":"The optimization objective is to free **exactly enough** resources to"},{"line_number":102,"context_line":"satisfy the incoming on-demand instance request while minimizing the"},{"line_number":103,"context_line":"number of preemptible instances terminated. This reduces disruption to"},{"line_number":104,"context_line":"preemptible workloads and preserves as many running preemptible instances"},{"line_number":105,"context_line":"as possible."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Candidate Selection and Sorting"},{"line_number":108,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"44727661_b4f0984b","line":105,"range":{"start_line":99,"start_character":0,"end_line":105,"end_character":12},"updated":"2026-06-08 15:29:51.000000000","message":"In the way that you describe here, the input parameter of your strategy would be to: free X vcpus and Y ram. And the strategy would search for preemptible instances to destroy. Is this your objective? This is different from the threshold mentioned above.","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  consumption upper-limit and the target is to bring resource"},{"line_number":97,"context_line":"  consumption below this threshold"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In all modes, the candidate selection and sorting logic (see"},{"line_number":100,"context_line":"`Candidate Selection and Sorting`_) is applied consistently."},{"line_number":101,"context_line":"The optimization objective is to free **exactly enough** resources to"},{"line_number":102,"context_line":"satisfy the incoming on-demand instance request while minimizing the"},{"line_number":103,"context_line":"number of preemptible instances terminated. This reduces disruption to"},{"line_number":104,"context_line":"preemptible workloads and preserves as many running preemptible instances"},{"line_number":105,"context_line":"as possible."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Candidate Selection and Sorting"},{"line_number":108,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"10f5c3bd_9af2bcee","line":105,"range":{"start_line":99,"start_character":0,"end_line":105,"end_character":12},"in_reply_to":"44727661_b4f0984b","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"47ad4dc7b48aa329a9431ef66b2e90dd4e04ca6c","unresolved":true,"context_lines":[{"line_number":120,"context_line":"  utilisation."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":123,"context_line":"  utilisation (CPU, RAM, and Disk). The least active instances are"},{"line_number":124,"context_line":"  preempted first. This makes a decision aiming free the instances"},{"line_number":125,"context_line":"  that are not using their resources wisely."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"43d4330e_ad1f1bcf","line":123,"updated":"2026-06-04 15:00:21.000000000","message":"how will we compare instances with different amounts of CPU, RAM and Disk. For example, between an instance with 10 cpus, 8Gb RAM and another with 4 cpus and 16 Gb RAM (the examples might not be reallistic, they are just to hopefully illustrate my point)","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"  utilisation."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":123,"context_line":"  utilisation (CPU, RAM, and Disk). The least active instances are"},{"line_number":124,"context_line":"  preempted first. This makes a decision aiming free the instances"},{"line_number":125,"context_line":"  that are not using their resources wisely."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"d2f2874b_a5f502f1","line":123,"in_reply_to":"0cda8777_e0a3dc45","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"234cefe1943d18976d99b98f9ff182aa54b044f5","unresolved":true,"context_lines":[{"line_number":120,"context_line":"  utilisation."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":123,"context_line":"  utilisation (CPU, RAM, and Disk). The least active instances are"},{"line_number":124,"context_line":"  preempted first. This makes a decision aiming free the instances"},{"line_number":125,"context_line":"  that are not using their resources wisely."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"0cda8777_e0a3dc45","line":123,"in_reply_to":"43d4330e_ad1f1bcf","updated":"2026-06-05 15:40:43.000000000","message":"My thought here is leverage the metrics tools to collect the CPU and RAM usage for comparison.\n\nActually while writing this comment, I noticed that we need more variables to do the comparison. The way that I thought is using some threshold variable for each type of resource, and if the usage is lower than the threshold, the instance will be preempted.\n\nFor the approach above, we need to determine whether having just one resource below the threshold is sufficient for preemption, or if we should require multiple resources (e.g. CPU and RAM) to be below that threshold. This is particularly relevant in environments where applications might demand a lot of RAM while the CPU usage remains low. We could tackle this by introducing a new variable that specifies which resources are included in the comparison.\n\nWhat do you think about this path?","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cd0a8e50b05674b98ac4415aed1fdf78ce3638f","unresolved":true,"context_lines":[{"line_number":155,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":156,"context_line":"with the Nova API."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":159,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":164,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"f737b847_ad5e078d","line":161,"range":{"start_line":158,"start_character":0,"end_line":161,"end_character":40},"updated":"2026-06-08 15:29:51.000000000","message":"If no policy is configured in the flavor we need to set a default behavior. We could also consider an strategy input parameter that user select the default preemption policy too.","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":155,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":156,"context_line":"with the Nova API."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Ideally, the user should be able to choose which policy they would"},{"line_number":159,"context_line":"like to use. This can be done via a Flavor property."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":164,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3df06180_d5ae8802","line":161,"range":{"start_line":158,"start_character":0,"end_line":161,"end_character":40},"in_reply_to":"f737b847_ad5e078d","updated":"2026-07-09 19:46:12.000000000","message":"Acknowledged","commit_id":"2308a360d85ecc1debfc7ae8da1fa6a4ae4f7c5b"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8dd06280_5a407a8e","line":85,"range":{"start_line":84,"start_character":48,"end_line":85,"end_character":20},"updated":"2026-06-18 12:04:33.000000000","message":"This free percentage is per-host or per-cluster (or the scope of the Audit). We may say, I want that, at least 15% of my cluster is free or at least 15% of each node is free, and that\u0027d lead to different results. Also, what resources you plan to take into account (cpu, ram and disk? )?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"42baaf1efdeb9e2af40fd44af718a7afc4d18d54","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfa15ab3_b5a9d6e7","line":85,"range":{"start_line":84,"start_character":48,"end_line":85,"end_character":20},"in_reply_to":"8dd06280_5a407a8e","updated":"2026-06-18 16:37:00.000000000","message":"Yeah, this is important to highlight here. If is 15% of total, users could also use scope to reduce the number of hosts to 1 if they want.\nso in the end by destroying intances we will free diferent resources, but we need to define what the algorithm will do here. Maybe the user could define the target per resource. So the input parameter would be cpu_free_percentage and so on? what do you guys think?\nNote that if we go with Cluster wide optimization, the algorithym should iterate over nodes and select instances from all, and avoid destroy lots of instances in the first node of the loop.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"49a9b9995d06f5761447c4b9a58d4da5c4629858","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f888ef69_60177c19","line":85,"range":{"start_line":84,"start_character":48,"end_line":85,"end_character":20},"in_reply_to":"bfa15ab3_b5a9d6e7","updated":"2026-06-19 10:08:16.000000000","message":"scope-wise free allocations works for me, but it\u0027d be good to specify in the spec. WRT per-resource parameter, i like it.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e0d145d1_e7031534","line":85,"range":{"start_line":84,"start_character":48,"end_line":85,"end_character":20},"in_reply_to":"f4ce419d_5a3b7cf3","updated":"2026-07-01 13:47:58.000000000","message":"this is i think adressed in the current version ill resolve this for now","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f4ce419d_5a3b7cf3","line":85,"range":{"start_line":84,"start_character":48,"end_line":85,"end_character":20},"in_reply_to":"f888ef69_60177c19","updated":"2026-06-21 20:51:09.000000000","message":"My initial idea is to be cluster-wide, not per-host. However, as Doug said, the operator can specify the scope of the audit. \n\nUsing cluster-wide could lead to fragmentation, where even freeing, let\u0027s say 15%, still not being able to create larger instances. An operator could combine other strategies to consolidate the cluster and have enough space to create new instances. Does it make sense?\n\nAdded to the spec the per-resource input parameters, and that the allocation can be scoped.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":96,"context_line":"number of preemptible instances terminated. This reduces disruption to"},{"line_number":97,"context_line":"preemptible workloads and preserves as many running preemptible"},{"line_number":98,"context_line":"instances as possible."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Candidate Selection and Sorting"},{"line_number":101,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"786f8330_64a98f4d","line":99,"updated":"2026-06-18 12:04:33.000000000","message":"I\u0027d recommend to state clearly that only allocations will be considered, not actual resources usage. Note that, because of oversubscription, actual resources utilization may still be high even when there are free resources to be allocated. this is specially true in CPU, where a higher overcommitment is usually allowed,","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"5f81d4d4a4e40c7d50f330208da59ee68c0aa0f8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"number of preemptible instances terminated. This reduces disruption to"},{"line_number":97,"context_line":"preemptible workloads and preserves as many running preemptible"},{"line_number":98,"context_line":"instances as possible."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Candidate Selection and Sorting"},{"line_number":101,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"6e9f274e_6cc15a4b","line":99,"in_reply_to":"1d347778_690cc548","updated":"2026-06-23 16:17:18.000000000","message":"Done","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":96,"context_line":"number of preemptible instances terminated. This reduces disruption to"},{"line_number":97,"context_line":"preemptible workloads and preserves as many running preemptible"},{"line_number":98,"context_line":"instances as possible."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Candidate Selection and Sorting"},{"line_number":101,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1d347778_690cc548","line":99,"in_reply_to":"786f8330_64a98f4d","updated":"2026-06-21 20:51:09.000000000","message":"Ack. I\u0027ve added a admonition to highlight this. Let me know if you think it is clear enough, please.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":110,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":111,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":5,"id":"94521481_49047b4f","line":113,"range":{"start_line":113,"start_character":11,"end_line":113,"end_character":22},"updated":"2026-06-18 12:04:33.000000000","message":"utilization or allocations?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":111,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfec4239_bf1cab4d","line":113,"range":{"start_line":113,"start_character":11,"end_line":113,"end_character":22},"in_reply_to":"94521481_49047b4f","updated":"2026-07-01 13:47:58.000000000","message":"this is adressed in the later versions","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c384b307533f71c8c2e948f2f95154f4e1fa0980","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b25498c5_1b39e140","line":115,"updated":"2026-06-18 14:45:30.000000000","message":"in this paragraph you use both `utilization` and `utilisation`. I personally have no preference for any of the forms, but we need to be consistently particularly if we use the word in any parameters so it\u0027s not confusing for users","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":false,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9cba9cf3_aa0b3170","line":115,"in_reply_to":"b25498c5_1b39e140","updated":"2026-06-21 20:51:09.000000000","message":"Done","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b463e09f_9e6e9b12","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"updated":"2026-06-18 12:04:33.000000000","message":"utilization or allocations? note that a highly used vm may free less allocations that one with lower actual usage. A vm with 1vcpu and 4GB may have more actual usage that a 4vCPU and 16GB one but would free less resources. If the goal is to free allocations, i\u0027d be more inclined to preempt based on allocations too.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7a0cf483e055f0d16117469a1d940069b1363374","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bb9d263e_2a8c5457","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"2e4b5322_2f915a4c","updated":"2026-06-22 14:20:12.000000000","message":"Ack, if you have a real world use case that you see value, you can even add it to the spec and build the solution based on that. An alternative in the future is to give that option to users. User may want to preempt spot instance that are consuming more cpu instead, which impacts environment with alocation ratio \u003e 1.0","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"26bf8f02_c3318d69","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"614a4882_e1e48b83","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"2e4b5322_2f915a4c","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"72671b9e_e52dce99","updated":"2026-06-21 20:51:09.000000000","message":"This policy is to release allocated resources based on the instances\u0027 utilization. The chosen instance will be the one that is with less active utilization (idle).\n\nSo having two VMs, one with 1vCPU and 4GB and another with 4vCPU and 16GB, if the latter has less cpu or ram utilization than the former, this one will be prempted.\n\nThe key idea is to delete instances that are not using their resources wisely (at least during the preemption process).\n\nIn my university we have a private cloud where users are not charged for what they use and they can create instances on-demand. But, it\u0027d be good to be able to preempt instances for those who are just allocating resources without actually consuming them. This is one use case that I thought.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"49a9b9995d06f5761447c4b9a58d4da5c4629858","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"72671b9e_e52dce99","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"8854d11a_5d9e0edf","updated":"2026-06-19 10:08:16.000000000","message":"each option has pros and cons. i.e. utilization-based may end up preempting a higher number of smaller instances because of utilization is higher. in the goals section mentions \"minimizing the number of preemptible instances terminated\", that would imply making decissions based on allocation if the resource to free are allocations.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"42baaf1efdeb9e2af40fd44af718a7afc4d18d54","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"8854d11a_5d9e0edf","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"b463e09f_9e6e9b12","updated":"2026-06-18 16:37:00.000000000","message":"Yeah, but if there are 2 different preemptible flavors in a cloud, the bigger flavor would be the one that will always be preempted first, if they are sorted by resource allocation. So maybe looking at resource usage here would make more sense in the same way that \"oldest\" also considers creation_time and not the allocated resources. If we go with usage, we need to make clear that is the real usage. But yeah, it is a bit confusing for users, or no?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"d19c8ef85c3992fcafbcd612e8f7d08fdf92f176","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":113,"context_line":"  resource utilisation."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":116,"context_line":"  utilisation (CPU and RAM). The least active instances are preempted"},{"line_number":117,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":118,"context_line":"  using their resources wisely. To compare two different instances,"},{"line_number":119,"context_line":"  there will be CPU and RAM weights to calculate a sum and compare"},{"line_number":120,"context_line":"  instances by their scores. The weights are passed as parameters to"},{"line_number":121,"context_line":"  the strategy: ``instance_cpu_usage_weight`` and"},{"line_number":122,"context_line":"  ``instance_mem_usage_weight``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"},{"line_number":125,"context_line":"resources, and stops as soon as the on-demand request can be satisfied."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"614a4882_e1e48b83","line":123,"range":{"start_line":115,"start_character":0,"end_line":123,"end_character":1},"in_reply_to":"bb9d263e_2a8c5457","updated":"2026-06-23 00:24:51.000000000","message":"Thanks for the suggestion. I added another use case to the spec based on the one that I said on this thread.\n\nAbout giving the ability to the user to choose which resource prioritize (for high usage or less usage), it would be good to have in the future indeed. Thanks, Doug.\n\nLet me know what you guys think.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":130,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":131,"context_line":"criterias:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":134,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":135,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":136,"context_line":"  possible."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d15bc024_b74a20d2","line":133,"range":{"start_line":133,"start_character":4,"end_line":133,"end_character":29},"updated":"2026-06-18 12:04:33.000000000","message":"this is good to be included, but it\u0027s not enough as it does not provides any information about how far/close we are of the goal. There should be some indicator of the actual goal, resources usage/allocation percentage before and after the actionplan is executed. i.e. resouces_usage_before: { cpu: 93, memory: 56, disk: 76}, resources_usage_after: { cpu: 93, memory: 56, disk: 76}. If the measures are per-host, we may do something related to that, etc...\n\nAlso I\u0027d add some information about the non-preempted preemtable instances. that may be in different forms, % preempted over the global, unpreemtped ones, etc...","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":130,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":131,"context_line":"criterias:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":134,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":135,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":136,"context_line":"  possible."}],"source_content_type":"text/x-rst","patch_set":5,"id":"a0181c6d_d0342d03","line":133,"range":{"start_line":133,"start_character":4,"end_line":133,"end_character":29},"in_reply_to":"453f1e4c_8afc6728","updated":"2026-06-25 16:31:04.000000000","message":"preempted_instances_count is itsslef not an Efficacy Indicator\n\nit just a tally of the affected isntances\n\nsince the goal is to \"Free compute resources in use by low\npriority workload\"\n\nit would only be an efficny indicator if your goal was\n\n\n\"Free compute resources in use by low priority workload minimising or maximising the number of affected workloads.\"","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":130,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":131,"context_line":"criterias:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":134,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":135,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":136,"context_line":"  possible."}],"source_content_type":"text/x-rst","patch_set":5,"id":"4ca1742d_d774eca8","line":133,"range":{"start_line":133,"start_character":4,"end_line":133,"end_character":29},"in_reply_to":"a0181c6d_d0342d03","updated":"2026-07-09 19:46:12.000000000","message":"Acknowledged","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":130,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":131,"context_line":"criterias:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":134,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":135,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":136,"context_line":"  possible."}],"source_content_type":"text/x-rst","patch_set":5,"id":"453f1e4c_8afc6728","line":133,"range":{"start_line":133,"start_character":4,"end_line":133,"end_character":29},"in_reply_to":"d15bc024_b74a20d2","updated":"2026-06-21 20:51:09.000000000","message":"Thanks for suggesting this, amoralej. I was waiting a more concrete solution before thinking of indicators.\n\nI added indicators regarding resource_utilization before and after the solution so we can compare them.\n\nI did not understand what is the point of having information about non-preempted instances. Would you mind explain? I\u0027m avoiding add information that will not be used.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"42baaf1efdeb9e2af40fd44af718a7afc4d18d54","unresolved":true,"context_lines":[{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"2d08af07_82d36b92","line":152,"range":{"start_line":152,"start_character":31,"end_line":152,"end_character":56},"updated":"2026-06-18 16:37:00.000000000","message":"\"preemption_mode\" should be fine, and have a default value.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":false,"context_lines":[{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3b93ae1f_521fd9bf","line":152,"range":{"start_line":152,"start_character":31,"end_line":152,"end_character":56},"in_reply_to":"2d08af07_82d36b92","updated":"2026-06-21 20:51:09.000000000","message":"Done. Changed the name of the parameter and added a brief description of the expected behavior for this policy.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"e29f8788_be5b1583","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"updated":"2026-06-18 12:04:33.000000000","message":"I\u0027m not sure if the user should be able to override the policy defined by the cloud operator. In my view:\n- The cloud admin should be able to restrict the options. i.e. they may want to use a delete-only policy where instances can not be shelved, only deleted. There may be be two config options available_preemption_policy and default_preemption_policy system-wise (or use).\n- Then, the user may define its own default policy in the audit via input parameter and override per instance/flavor metadata.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"b5b0fcc7_4013cc7b","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"in_reply_to":"71f02987_db288665","updated":"2026-07-01 13:47:58.000000000","message":"watcher is an admin only service today but the falvor is a contract with the end user.\n\nspecifycing a default_preemption_policy is fine in the audit parmater as \nwinicius replied but overriedign teh value in the flavor or instance metadata would not be so defualt_ is correct otherwise we shoudl remove this entrily","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"4db11c83_5cab2437","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"in_reply_to":"936b5fcc_336825a8","updated":"2026-07-09 19:46:12.000000000","message":"Done","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":true,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"936b5fcc_336825a8","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"in_reply_to":"b5b0fcc7_4013cc7b","updated":"2026-07-01 18:13:53.000000000","message":"I think it is better to no override this policy via instance metadata, and if we are establishing a contract with the cloud operator where they need to create a flavor with a specific property, we actually don\u0027t need a default value.\n\nI don\u0027t want to leave open questions at this point, but I think this is straightforward.\n\nWhat do you guys think?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"71f02987_db288665","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"in_reply_to":"bee98f03_f9c54efd","updated":"2026-06-21 20:51:09.000000000","message":"I think the default policy here plays a role of being a backup value in case the cloud admin doesn\u0027t specify within the flavor which policy should be used.\n\nUsers can\u0027t create nor edit flavors, so they can\u0027t override the value defined by the admin. \n\nWDYT?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"42baaf1efdeb9e2af40fd44af718a7afc4d18d54","unresolved":true,"context_lines":[{"line_number":148,"context_line":"this on an instance will be via Watcher\u0027s actions and communicating"},{"line_number":149,"context_line":"with the Nova API."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":152,"context_line":"used via the input parameter ``default_preemption_policy``. Besides,"},{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bee98f03_f9c54efd","line":154,"range":{"start_line":151,"start_character":0,"end_line":154,"end_character":47},"in_reply_to":"e29f8788_be5b1583","updated":"2026-06-18 16:37:00.000000000","message":"I see that it could be selected via flavor, but these flavor would be provided to users by the admin, and they may have different prices associated?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ade3ee574b67747b6a5bcfefdb4b28696454e48e","unresolved":true,"context_lines":[{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":159,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"370201b8_fd520605","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":2},"updated":"2026-06-18 12:04:33.000000000","message":"about the way to express that an instance is preemtable,","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c3e3b82f05066e80b5f43fa22daa5b647dea5f33","unresolved":true,"context_lines":[{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":159,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6260c42b_a8712b22","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":2},"in_reply_to":"0bc419a2_07f10852","updated":"2026-06-21 20:51:09.000000000","message":"Yeah, flavors properties can be modified after an instance creation. I believe this is the safest approach in a sense of avoiding users modifying their instances to not be preemptible anymore. However, is up to the administrator be aware of the risks of changing properties.\n\nIs it worth adding a paragraph about it?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":159,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"31d13d34_c9133e40","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":2},"in_reply_to":"2c622818_8921ebf9","updated":"2026-06-30 21:33:07.000000000","message":"Done. In the \"Candidate Selection and Sorting\" section I have also added which flavor property the strategy will lookup. I forgot to mention that.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"3b2ee68563d6d226b6366c8dbc714ed3e3014d30","unresolved":true,"context_lines":[{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":159,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0bc419a2_07f10852","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":2},"in_reply_to":"370201b8_fd520605","updated":"2026-06-18 12:05:55.000000000","message":"I understand we want to use flavor properties so that it can not be modified easily? can the flavors properties being modified on the fly after the instances are created?","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":153,"context_line":"the cloud user should be able to choose which policy they would like"},{"line_number":154,"context_line":"to use. This can be done via a Flavor property."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":159,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"2c622818_8921ebf9","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":2},"in_reply_to":"6260c42b_a8712b22","updated":"2026-06-25 16:31:04.000000000","message":"this should be a litreral \n```\n`lifecycle:preempt_policy\u003dshelve|delete`\n```\ninsteead of useing * to add emphasie via italics\n\nlifecycle:preemptable\u003dTrue|False was the value i propsoed before\n\nhttps://etherpad.opendev.org/p/r.bf5f1185e201e31ed8c3adeb45e3cf6d#L747\n\n```\n    \"lifecyle:live-migratable\u003dtrue|false\"  declares if this instance may be live migrated even if its possbel (lifecyle:live-migratable\u003dfalse  is useful for runing ectd database on openstack where live migration is not recommend)\n\n    \"lifecyle:cold-migratable\u003dtrue|false\"  declares if this instance may  be cold migrated even if its possbel (useful for runing ectd database on openstack)\n\n    \"lifecyle:evacuatable\u003dtrue|false\"  \n\n    \"lifecyle:shelvable\u003dtrue|false\"  \n\n    \"lifecycle:premetable\u003dtrue|false\"\n\n    this woudl allwo watcher to implement spot/premetable isntnace instances\n\n    \"ha:maintance_stragey:inplace|power_off|migrate\" how shoudl masikari or watcher treat the vm if the comptue service is disabeld for maintiance\n\n    if \"ha:maintance_stragey\u003dmigrate  watcher would choose one of the lifecycle operatiosn allwoed by the instance to do the move it if you were doing maitance on the under lying host.\n\n    \"ha:role\u003d\"primary|secondary\"\n\n    ha:priority:\u003csome value that makes sense to the consumer\u003e e.g. high/medium/low, gold/silver/bronze , wiskey,/coffee/cake\n```\n\nso i think lifecycle: or optimize: are the right prefixes\n\n`optimize` is better if it watcher specific \n\n\n`lifecyle:` has it advantatge if we ever wan nto to enfoce some of those constraits later.","commit_id":"90ef4929a3dd8c92693c6dc3beda0ad2146687e8"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":33,"context_line":"especially because of the high costs associated with it--both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances `[1]`_ `[2]`_. That is, offer instances to use the spare"}],"source_content_type":"text/x-rst","patch_set":6,"id":"aca971ee_f110a7bd","line":36,"updated":"2026-06-21 21:01:37.000000000","message":"Grammar error on line 36: \u0027underutilization resources\u0027 is missing a preposition. Should read \u0027underutilization of resources\u0027.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Impairs readability and professionalism of the specification.\n\n**Suggestion**:\nChange \u0027underutilization resources\u0027 to \u0027underutilization of resources\u0027 on line 36.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":36,"context_line":"but this can also lead to underutilization resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances `[1]`_ `[2]`_. That is, offer instances to use the spare"},{"line_number":40,"context_line":"capacity but they can be interrupted at any time. Currently, OpenStack"},{"line_number":41,"context_line":"does not provide any mechanism to achieve this. We can use Watcher to"},{"line_number":42,"context_line":"have this feature and leverage the decision engine based on data"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e3590eb6_6005ad90","line":39,"updated":"2026-06-21 21:01:37.000000000","message":"Line 39 exceeds the 79-character line length limit enforced by the watcher-specs template (which states \u0027Please wrap text at 79 columns\u0027). The line runs to approximately 81 characters.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: May cause docutils/Sphinx warnings when building documentation, and violates the project\u0027s stated formatting standard.\n\n**Priority**: Before merge\n**Why This Matters**: The watcher-specs template explicitly requests 79-column wrapping. Long lines in RST source reduce readability in Gerrit\u0027s side-by-side diff view and may produce build warnings.\n\n**Recommendation**:\nBreak line 39 after the first reference link to keep within 79 characters. For example: \u0027preemptible instances [1]_ [2]_. That is, offer instances to use the\u0027 then continue \u0027spare capacity but they can be interrupted at any time.\u0027","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"}],"source_content_type":"text/x-rst","patch_set":6,"id":"26b8a72f_6d52f0f3","line":49,"updated":"2026-06-21 21:01:37.000000000","message":"Use of Unicode curly quotes (smart apostrophes) on lines 49, 52, and 57 instead of ASCII straight apostrophes. RST documents in OpenStack conventionally use ASCII punctuation.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Inconsistent with other specs in the same directory that use ASCII apostrophes. May cause rendering issues in some Sphinx configurations.\n\n**Suggestion**:\nReplace Unicode right single quotation marks (U+2019) with ASCII apostrophes on lines 49, 52, and 57.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Goal"},{"line_number":67,"context_line":"--------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The idea of this goal is: **Free compute resources in use by"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5177322e_310f91a1","line":69,"updated":"2026-06-21 21:01:37.000000000","message":"Awkward phrasing on line 69: \u0027look fit on this feature\u0027. This should be \u0027are suitable for this feature\u0027 or \u0027fit this feature\u0027.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Impairs readability of a key introductory paragraph explaining the need for a new goal.\n\n**Suggestion**:\nRewrite line 69 to: \u0027Since none of the already implemented Watcher goals are suitable for this feature, we will need a new goal.\u0027","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7a0cf483e055f0d16117469a1d940069b1363374","unresolved":true,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The idea of this goal is: **Free compute resources in use by"},{"line_number":73,"context_line":"preemptible instances**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"0a64ad21_2608595e","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":24},"updated":"2026-06-22 14:20:12.000000000","message":"We just need to think in a name for this goal. This is fine for its description. Or we may say: \"Free resources in used by low priority workloads\".\nIn the end this is going to free resources, so the goal could really be only free_allocated_resources, or free_resources, free_low_priority_resources...\nThen the strategy will work on spot instances to achieve these free % of resources.\nWDYT?","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"d19c8ef85c3992fcafbcd612e8f7d08fdf92f176","unresolved":true,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The idea of this goal is: **Free compute resources in use by"},{"line_number":73,"context_line":"preemptible instances**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"c2624a45_ebd745cd","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":24},"in_reply_to":"0a64ad21_2608595e","updated":"2026-06-23 00:24:51.000000000","message":"Ack. This makes more sense. Therefore, we have a more generic goal and we can implement other strategies on top of it.\n\nI also changed the strategy name to reflect the allocation-based trait of the strategy :), since as we already discussed, we could have another strategy to deal with utilization-based preemption.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The idea of this goal is: **Free compute resources in use by"},{"line_number":73,"context_line":"preemptible instances**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2555e594_2aaa6e47","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":24},"in_reply_to":"2c9b2695_bbe3de9e","updated":"2026-07-01 18:13:53.000000000","message":"Done","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The idea of this goal is: **Free compute resources in use by"},{"line_number":73,"context_line":"preemptible instances**."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2c9b2695_bbe3de9e","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":24},"in_reply_to":"c2624a45_ebd745cd","updated":"2026-07-01 13:47:58.000000000","message":"you didnt update this text however to refact that\n\nsoemthing like this.\n\n```suggestion\nThe the objective of this goal is to free resources in used by low priority workloads and there for optimise capacity for higher priority workloads.\nThis optimising infrastructure utilisation by allowing lower prirty wrokloads\nto use spare capasity while also enableing higher return on investment when\ncapsity is needed.\n```","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7a0cf483e055f0d16117469a1d940069b1363374","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"84828dcf_bb77be74","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"updated":"2026-06-22 14:20:12.000000000","message":"an idea: it could be only \"utilization\" and a parameter would say te strategy: low or high, meaning low-utilization or high-utilization","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"5f81d4d4a4e40c7d50f330208da59ee68c0aa0f8","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"c263b2de_dd105f09","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"171a439f_67e20726","updated":"2026-06-23 16:17:18.000000000","message":"For me this is contradictory with the \"minimizing the number of preemptible instances terminated.\"\n\nThe question is, if i need to free 4vCPUs and 16GB allocations in my cluster to achieve the goal, what\u0027d be the expected behavior? preempt 4 VMs with 1vCPU and 4GB or 1 VM with 4vCPU and 16GB flavor? your proposal, iiuc, is that if the 1vCPU4GB instances are using less resources, those would be the preempted ones although that is not minimizing the number of preemptible instances terminated.\n\nActually, also the oldest-first criteria also can lead to terminate more that minimal number. If the oldest vms are smaller, we\u0027ll need to terminate more to free the required resources allocations.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"b3eb4c82_d153be92","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"66c20916_f86dfa0c","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"f6dde1c9_73a6adbd","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"6b4cb4e2_3c95a47b","updated":"2026-06-25 16:31:04.000000000","message":"yes so i would liek to effectly be able to have a single parmater wich is a prefereicall order list of tuples\n\npreemption_preference \u003d [age:dec,size:dec,utilization:acc] \n\nwhere dec and acc arae decending and acceding \n\nto implemnt this in python you jsut need to call sort in a loop in reverse order\n```\ncandidates \u003d get_candiates(instances)\nprojection_function \u003d {\n\u0027age\u0027: lambda x: time.now() - x.created_at\n  ...\n}\n\nfor policy in reverse(preemption_preference):\n    key \u003d projection_function[policy[0]]\n    dir\u003d policy[1] \u003d\u003d \u0027dec\u0027\n    candidates \u003d sorted(candidates , key\u003dkey, reverse\u003ddir)\n```\n\nhttps://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts\n\nwe would proably use function insted of lambda but you get the idea.\n\nwe have a set of key function that project a sortable value form the candiate and use the stablity of python sort to allow multi levle sorting with contolabel direciotn without expsoing a interface to allow opertots to pass arbitary code\n\nsize in this case proably shoudl be cpu ram and disk or better yet\n\nRESOUCES:*  so you can express any placmenet resouce class i.e. to alow reaping the instnace that is using the most of a given resouce like a gpu.\n\n\nthe other thing we consider as a higher level priroty, although it techinally expressbale via the approch above is a prefence for minimizing or maxiuming the reaped instances\n\ni think rather then a dedicated flag for that we shoudl isntead codeify how to express that in terms of the other vlaues.\n\nthe same way that itertools does\n\nhttps://docs.python.org/3/library/itertools.html#itertools-recipes\n\nideally we woudl actully do the sorting lazally using somethign like heapify\nasking gemini ot create some example code it woudl look something liek this\n\nhttps://paste.opendev.org/show/bLUTSJKxl1G34FYQbo84/\n\nputing togheter all my feedback on this section i might evolve it in the dreiction fo\n\nhttps://paste.opendev.org/show/bnFwJ4tJ7BNYCNDxy4c3/\n\nthe exact detail of how we do the sroting ilel with built in sorted or not is an implemation detail that we can defer to the code review rather then specifying here as long as we capture the contract.\n\nlazy sorting its oly useful if we dont need to evaulate all candiates otherwise pythons corted is very very well optimized already.\nhttps://github.com/ondergetekende/lazy_sort#further-analysis\n\n\nif you are rungint the audit frequently we woudl expeft to only reap a small fraction of the possibel candiates as we shoudl not have signifclaly exceed the treshold since the last audit.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"d19c8ef85c3992fcafbcd612e8f7d08fdf92f176","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"171a439f_67e20726","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"84828dcf_bb77be74","updated":"2026-06-23 00:24:51.000000000","message":"What is the advantage of choosing high utilization for this case? Just to make sure that I\u0027m on the same page. Is it about noisy neighbour?","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"1c84155b8260a730c391051a42c6328b13d0ef91","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e02f44f4_83d048cb","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"c263b2de_dd105f09","updated":"2026-06-23 22:11:21.000000000","message":"Maybe I\u0027m missing something from Watcher\u0027s architecture, if you guys could clarify to me.\n\nFrom what I understand, we have Solutions with indicators that will be used to compare Solutions and choose which one should be applied. In this case, will not the engine calculate more than one solution e.g. preempting 4 VMs or preempting 1 VM (leading to choose the solution that preempts just 1VM)?","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9824bb246dfa8cfc681c7e9e8bbcb37ae7c4f2a6","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"6b4cb4e2_3c95a47b","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"e02f44f4_83d048cb","updated":"2026-06-24 07:23:06.000000000","message":"The strategy itself is responsible of finding, creating and proposing just one solution per audit execution based on its internal algorithm. As part of that execution it can evaluate whatever alternatives based on the desired criteria (be careful with complexity, more simulations usually means more execution time and potentially worse scalability) but at the end of the execution it has to propose just one solution with one set of values for efficacy indicators.\nThe criteria to find the best solution should be clear, although there may be a hierarchy of conditions that may be configurable.\n\ni.e. criteria 1 may be to minimize the number of instances terminated, being utilization or age just as tie-breaker (i.e. in the previous case if i have multiple VMs with 4vCPU and 16GB, which one to choose?), or even having some condition that overrides the first criteria (i.e. do not terminate an instance created less than 1 day ago, or whatever limit, even if that means breaking the criteria 1, minimizing the number of terminations, unless it\u0027s the only way to achieve the goal). I\u0027m not saying which one is better, there are many options that could be implemented, my point is that it would be nice to reflect it in the spec more clearly.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":140,"context_line":"  resource utilization."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":143,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"},{"line_number":144,"context_line":"  first. This makes a decision aiming free the instances that are not"},{"line_number":145,"context_line":"  using their resources wisely. To compare two different instances,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"66c20916_f86dfa0c","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":69},"in_reply_to":"f6dde1c9_73a6adbd","updated":"2026-06-30 21:33:07.000000000","message":"If you permit me, I put most of the section from the link you provided, except the perfomance optimization section, we can discuss this during the development.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":155,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":158,"context_line":"criterias:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":161,"context_line":"  instances. This is important because it is part of the soluction"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2a299a93_d7ace477","line":158,"updated":"2026-06-21 21:01:37.000000000","message":"Spelling error: \u0027criterias\u0027 on line 158. \u0027Criteria\u0027 is already plural; \u0027criterias\u0027 is not a valid English word.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Reduces the professionalism of the specification document and may confuse non-native English readers.\n\n**Suggestion**:\nReplace \u0027criterias\u0027 with \u0027criteria\u0027 on line 158.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":158,"context_line":"criterias:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":161,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":162,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":163,"context_line":"  possible."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"f3b73eb7_fc66bfde","line":161,"updated":"2026-06-21 21:01:37.000000000","message":"Spelling error: \u0027soluction\u0027 on line 161. This should be \u0027solution\u0027.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Typo in a specification document reduces credibility and may cause confusion.\n\n**Suggestion**:\nReplace \u0027soluction\u0027 with \u0027solution\u0027 on line 161.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":180,"context_line":"For the sake of this specification, the strategy can follow two"},{"line_number":181,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":182,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":183,"context_line":"in-memory information, or it can be **deleted**, in which delete the"},{"line_number":184,"context_line":"instance and all associated resources. The way to perform this on an"},{"line_number":185,"context_line":"instance will be via Watcher\u0027s actions and communicating with the Nova"},{"line_number":186,"context_line":"API."}],"source_content_type":"text/x-rst","patch_set":6,"id":"f1263cd5_cd3a8c30","line":183,"updated":"2026-06-21 21:01:37.000000000","message":"Awkward and grammatically incorrect sentence on line 183: \u0027in which delete the instance and all associated resources\u0027. The clause structure is broken.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: The meaning is unclear, which is problematic in a specification document where precision matters.\n\n**Suggestion**:\nRewrite to: \u0027or it can be deleted, in which case the instance and all associated resources are removed.\u0027","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \u0027resource_id\u0027: str  # should be a UUID"},{"line_number":207,"context_line":"    }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Preconditions:"},{"line_number":210,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    Delete:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5b2d388c_1ea0f38b","line":209,"updated":"2026-06-21 21:01:37.000000000","message":"The Preconditions and Postconditions sections use inconsistent indentation (4-space indented content under section headers). The template shows these as flush-left subsections.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Consistent formatting aligns with the template structure and improves readability in rendered documentation.\n\n**Recommendation**:\nRemove the 4-space indentation from the preconditions and postconditions content so they render as standard definition lists or bullet points.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":210,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    Delete:"},{"line_number":213,"context_line":"        * The instance should exists"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Shelve:"},{"line_number":216,"context_line":"        * The instance should exists"}],"source_content_type":"text/x-rst","patch_set":6,"id":"15b1d32d_af1c261e","line":213,"updated":"2026-06-21 21:01:37.000000000","message":"Grammar errors on lines 213 and 216: \u0027The instance should exists\u0027 uses incorrect verb form. After the modal \u0027should\u0027, the base form \u0027exist\u0027 is required.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Grammar errors in formal specification documents reduce clarity for international contributors.\n\n**Suggestion**:\nChange \u0027should exists\u0027 to \u0027should exist\u0027 on both line 213 and line 216.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    Shelve:"},{"line_number":226,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"Alternatives"},{"line_number":229,"context_line":"------------"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"b7e48a01_50f26bd5","line":228,"updated":"2026-06-21 21:01:37.000000000","message":"The Alternatives section simply says \u0027None\u0027. For a feature of this scope, at least one alternative approach should be discussed and dismissed with reasoning.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Demonstrates that the proposed approach was chosen deliberately rather than being the first idea. Helps future contributors understand design decisions.\n\n**Recommendation**:\nConsider discussing alternatives such as: (1) using Nova server groups with policies, (2) using placement-aggregate affinity, or (3) implementing preemption at the Nova scheduler level rather than via Watcher.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"None"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Security impact"},{"line_number":244,"context_line":"---------------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"570c093b_e400245f","line":243,"updated":"2026-06-21 21:01:37.000000000","message":"Security impact is listed as \u0027None\u0027 but the spec introduces a mechanism to delete or shelve running instances based on a tagging property. A malicious or privileged user who can set the preempt_policy flavor property or tag instances could trigger involuntary termination of workloads.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Incorrectly dismissing security impact may lead to missing access controls, policy rules, or audit logging for the preemption actions. Instance deletion is a destructive operation.\n\n**Priority**: Before merge\n**Why This Matters**: The spec enables Watcher to terminate user instances. The security section should discuss who can configure preemptible tagging, what RBAC policies govern the new actions, and whether preemption events are logged for forensics.\n\n**Recommendation**:\nRewrite the Security impact section to address: (1) which roles can set the lifecycle:preempt_policy flavor property, (2) whether the preemption actions require admin privileges in Watcher, (3) notification/audit trail for preempted instances, and (4) potential for resource exhaustion abuse.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Performance Impact"},{"line_number":259,"context_line":"------------------"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7d2572dc_ea05200d","line":258,"updated":"2026-06-21 21:01:37.000000000","message":"The \u0027Performance Impact\u0027 section (line 258-261) states \u0027None\u0027, but the strategy involves querying resource allocation data across compute nodes, sorting candidate instances, and making Nova API calls (delete/shelve). This has measurable performance implications.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Reviewers and operators may underestimate the overhead of running the preemption strategy at scale. The decision engine must evaluate all preemptible instances on affected nodes.\n\n**Suggestion**:\nAdd a brief note about decision-engine overhead when evaluating large numbers of preemptible instances, Nova API call latency for shelve/delete operations, and whether the strategy runs as a periodic audit or event-triggered.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":279,"context_line":"Primary assignee:"},{"line_number":280,"context_line":"  winiciusallan"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"Work Items"},{"line_number":283,"context_line":"----------"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"*writing...*"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e25a8201_576c5bb8","line":282,"updated":"2026-06-21 21:01:37.000000000","message":"Required sections Work Items, Testing, and Documentation Impact contain only placeholder text (\u0027*writing...*\u0027) instead of actual content. The watcher-specs template explicitly states these sections must be filled.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Reviewers cannot evaluate the implementation plan, test strategy, or documentation needs. The spec is incomplete and not ready for approval in its current state.\n\n**Priority**: Before merge\n**Why This Matters**: A specification that leaves Work Items, Testing, and Documentation Impact as placeholders fails its purpose of defining scope and alignment. Other approved specs in the same directory (e.g. audit-pipeline.rst) fill these sections thoroughly.\n\n**Recommendation**:\nReplace \u0027*writing...\u0027 placeholders with concrete work items broken into phases, a testing strategy (unit tests, tempest scenarios, edge cases for preemption), and documentation deliverables (user guide, API reference for new actions).","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":302,"context_line":"References"},{"line_number":303,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":".. _[1]:"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"[1] AWS Spot Instances Documentation -"},{"line_number":308,"context_line":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3c710963_c3bfcacb","line":305,"updated":"2026-06-21 21:01:37.000000000","message":"The RST reference syntax used for [1] and [2] uses bracket-embedded anchors (\u0027.. _[1]:\u0027) which is non-standard. Standard RST external link syntax uses \u0027.. _label:\u0027 followed by the URL on the next line.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Using standard RST reference syntax ensures reliable rendering across Sphinx versions and avoids potential docutils warnings.\n\n**Recommendation**:\nConsider using standard RST external link syntax such as \u0027.. _`[1]`: URL\u0027 or standard inline reference syntax to ensure compatibility.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"80b365ed21e9046bbaa9ab048212732082975757","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":315,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1f095c06_3d11e1ae","line":314,"updated":"2026-06-21 21:01:37.000000000","message":"Reference [3] (Red Hat downstream issue) on lines 314-315 is not formatted as an RST hyperlink reference like [1] and [2]. It appears as plain text without a link anchor.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Consistent RST reference formatting ensures all references render correctly in Sphinx-generated documentation.\n\n**Recommendation**:\nFormat reference [3] consistently with [1] and [2], or convert all references to standard RST external link format with named anchors.","commit_id":"2e7e2bd57020acf18b3c5f47646e0ab40bc8f8f3"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"49505e4a35ddb1a0639092635548036cc1596772","unresolved":true,"context_lines":[{"line_number":76,"context_line":"feature, we will need a new goal."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The idea of this goal is: **Free compute resources in use by low"},{"line_number":79,"context_line":"priority workload**."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e6eecff2_e2920c7a","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":17},"updated":"2026-06-23 00:33:59.000000000","message":"I missed an \"s\" here. Will wait for another review to push it together.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":76,"context_line":"feature, we will need a new goal."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The idea of this goal is: **Free compute resources in use by low"},{"line_number":79,"context_line":"priority workload**."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1cc241a2_dec2d579","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":17},"in_reply_to":"7dbe515d_6b0d0808","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":76,"context_line":"feature, we will need a new goal."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"The idea of this goal is: **Free compute resources in use by low"},{"line_number":79,"context_line":"priority workload**."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7dbe515d_6b0d0808","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":17},"in_reply_to":"e6eecff2_e2920c7a","updated":"2026-06-25 16:31:04.000000000","message":"i alos dont think we shoudl use bold here  `**`","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"This spec adds a new strategy called **PreemptInstancesAllocated**."},{"line_number":85,"context_line":"Its functionality is described below."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Optimization Target"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d633acfc_2b852aae","line":84,"range":{"start_line":84,"start_character":37,"end_line":84,"end_character":66},"updated":"2026-06-25 16:31:04.000000000","message":"```suggestion\nThis spec adds a new strategy called ``PreemptInstancesAllocated``.\n```\n\nwe should prefer litrial syntax instead of `**` to bold it\n\nfor any classnames or other terms","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fe23de60f519c5e29b0f7591a0850b12b61472e8","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"This spec adds a new strategy called **PreemptInstancesAllocated**."},{"line_number":85,"context_line":"Its functionality is described below."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Optimization Target"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e1fd8c63_60c7d01c","line":84,"range":{"start_line":84,"start_character":37,"end_line":84,"end_character":66},"in_reply_to":"d633acfc_2b852aae","updated":"2026-06-26 13:13:40.000000000","message":"+1","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Strategy"},{"line_number":82,"context_line":"--------"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"This spec adds a new strategy called **PreemptInstancesAllocated**."},{"line_number":85,"context_line":"Its functionality is described below."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Optimization Target"}],"source_content_type":"text/x-rst","patch_set":7,"id":"c201fdaf_7cc3f14d","line":84,"range":{"start_line":84,"start_character":37,"end_line":84,"end_character":66},"in_reply_to":"d633acfc_2b852aae","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fe23de60f519c5e29b0f7591a0850b12b61472e8","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    Note that the strategy bases its decisions on **allocated**"},{"line_number":127,"context_line":"    resources (i.e. vCPU, RAM, or disk reserved by each instance\u0027s"},{"line_number":128,"context_line":"    flavor) rather than actual resource utilization. As a result,"},{"line_number":129,"context_line":"    preemption can be triggered even when affected compute nodes are"},{"line_number":130,"context_line":"    under heavy real usage, since the thresholds track free allocation,"},{"line_number":131,"context_line":"    not load."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"759708e1_ac623863","line":129,"updated":"2026-06-26 13:13:40.000000000","message":"I think this is missing a `not`? \n```suggestion\n    preemption can be triggered even when affected compute nodes are not\n```","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    Note that the strategy bases its decisions on **allocated**"},{"line_number":127,"context_line":"    resources (i.e. vCPU, RAM, or disk reserved by each instance\u0027s"},{"line_number":128,"context_line":"    flavor) rather than actual resource utilization. As a result,"},{"line_number":129,"context_line":"    preemption can be triggered even when affected compute nodes are"},{"line_number":130,"context_line":"    under heavy real usage, since the thresholds track free allocation,"},{"line_number":131,"context_line":"    not load."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e193dfc8_1d29bea0","line":129,"in_reply_to":"15de3e3d_761d2825","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    Note that the strategy bases its decisions on **allocated**"},{"line_number":127,"context_line":"    resources (i.e. vCPU, RAM, or disk reserved by each instance\u0027s"},{"line_number":128,"context_line":"    flavor) rather than actual resource utilization. As a result,"},{"line_number":129,"context_line":"    preemption can be triggered even when affected compute nodes are"},{"line_number":130,"context_line":"    under heavy real usage, since the thresholds track free allocation,"},{"line_number":131,"context_line":"    not load."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"8a52ecb6_b8fb794f","line":129,"in_reply_to":"759708e1_ac623863","updated":"2026-06-30 18:31:38.000000000","message":"It depends on the use case I think. There was an use case that was focusing on terminating instances that are not using in use (low resource utilizadion). So in this case I think that we may want select if we prefer to order by highest or lowest resource utilization... which would also require us to write this note again","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    Note that the strategy bases its decisions on **allocated**"},{"line_number":127,"context_line":"    resources (i.e. vCPU, RAM, or disk reserved by each instance\u0027s"},{"line_number":128,"context_line":"    flavor) rather than actual resource utilization. As a result,"},{"line_number":129,"context_line":"    preemption can be triggered even when affected compute nodes are"},{"line_number":130,"context_line":"    under heavy real usage, since the thresholds track free allocation,"},{"line_number":131,"context_line":"    not load."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"15de3e3d_761d2825","line":129,"in_reply_to":"8a52ecb6_b8fb794f","updated":"2026-06-30 21:33:07.000000000","message":"I changed the note to include the new weighted-utilization parameter so it will actually depend on the value that the operator pass to the strategy.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":133,"context_line":"Candidate Selection and Sorting"},{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Before selecting which instances to preempt, the strategy builds a"},{"line_number":137,"context_line":"candidate list of all preemptible instances running on the affected"},{"line_number":138,"context_line":"compute node(s). The order in which candidates are evaluated for"},{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"2cc3aa11_06f21a62","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":15},"updated":"2026-06-25 16:31:04.000000000","message":"so i think this candiate logic should be a reuabsle funciton that takes either a list of instnace or a cluster data model and filters it\n\nthe reason for this is i think we will want to re apply the same crtiria iteritivly to compute the final plan\n\n\naddtionally i tihkn regardless of  the policy we use to selct form the candiate there are some inventiat we will want to express \n\nsome examples i have in mind are as follows \n\na min_age defaulting to 3600s since creation so an admin can express a min time before premetion to there users,  this need to be expresbale in the audit (perhaps via the audit scope as min_instace_age could be useful for other stragies) \nbecause diffent clodu will have diffent contract\n\nibm cloud has a 30s premention notice policy were as aws and oper provider tend to be 1 horu to 1 day depnending on the size of the instance\n\nobviouly we will also only be filting to instance that are annotates as premetable via the flavor or instnace metadata but this filtering fuction should handle\n\nboth the mandatoy invarent (only premetable instance) and the condtional ones.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":133,"context_line":"Candidate Selection and Sorting"},{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Before selecting which instances to preempt, the strategy builds a"},{"line_number":137,"context_line":"candidate list of all preemptible instances running on the affected"},{"line_number":138,"context_line":"compute node(s). The order in which candidates are evaluated for"},{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"8b5a898f_efc02fbb","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":15},"in_reply_to":"2cc3aa11_06f21a62","updated":"2026-06-30 18:31:38.000000000","message":"+1 on the minimal age option, I think that shouldn\u0027t be hard to include this and exclude instances that didn\u0027t reach the min_age.\nWe could also include a delay before start terminating the instances, but not sure if we have time to discuss more on how it should be done here.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":133,"context_line":"Candidate Selection and Sorting"},{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Before selecting which instances to preempt, the strategy builds a"},{"line_number":137,"context_line":"candidate list of all preemptible instances running on the affected"},{"line_number":138,"context_line":"compute node(s). The order in which candidates are evaluated for"},{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"900faf7c_f9bffafa","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":15},"in_reply_to":"8b5a898f_efc02fbb","updated":"2026-06-30 21:33:07.000000000","message":"Added the min_age parameter in this same section. LMK what you guys think.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"Candidate Selection and Sorting"},{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Before selecting which instances to preempt, the strategy builds a"},{"line_number":137,"context_line":"candidate list of all preemptible instances running on the affected"},{"line_number":138,"context_line":"compute node(s). The order in which candidates are evaluated for"},{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"d5976c7c_5dd31278","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":15},"in_reply_to":"900faf7c_f9bffafa","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"}],"source_content_type":"text/x-rst","patch_set":7,"id":"6134be18_8e122b31","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":62},"updated":"2026-06-30 18:31:38.000000000","message":"So in general I think that you can simplify this section by mentioning which metrics/attributes will be available for the user to sort: age/create_at, usage, allocation, etc. As sean mentioned, it should be fine implement it with python and let more options available for the user instead of just covering an specific use casa. What do you plan to do here? Each reviewer may see an advantage in a different use case..","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":false,"context_lines":[{"line_number":139,"context_line":"termination is controlled by the ``preemption_sort_by`` parameter, which"},{"line_number":140,"context_line":"accepts the following values:"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e5b25abb_d58fa39c","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":62},"in_reply_to":"6134be18_8e122b31","updated":"2026-07-01 19:12:48.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":146,"context_line":"  resource utilization."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":149,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":7,"id":"0d18328a_1189f40f","line":146,"range":{"start_line":144,"start_character":54,"end_line":146,"end_character":23},"updated":"2026-06-25 16:31:04.000000000","message":"im not sure we should hard code this\n\na better approch would be to provide a list of sort crtitia\n\npython sort is stable so if you sort by x then y you get a stabel relitive order\n\nwhere the list is primarly sorted by Y and within groups of equal Y it is then sorted by x\n\nthis can also be done vai a tuple sort where you project a touple of the relevent data and then again the sort order is determistic \ni.e. (date, allocation, utilistaiton) as a tuppel will sort left to right with the date being the primary sort then allocation size then utilisation\n\nthis is sort of a implemation detail but i woudl expectg oldest not to look at utilisation in general but ranter capsity/allocation first.\n\nas an operator i dont really care if the utilsiation is 10% or 100% in genreail i care about my resellibale capatiy and achiving the treshold\n\nso we need to be able to express the prioty of the sorting critia in a way that allow an admin to encode there init\n\nwe eithe rdo that by have seperate stragies for oldes and utilsitation and having the operator select which one\n\nor we allow thos critia to be parmaters to a generalised alghortim \n\nbut mixing aga and utilsiation in a singel approch is too tighly coupled IMO","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fe23de60f519c5e29b0f7591a0850b12b61472e8","unresolved":true,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":146,"context_line":"  resource utilization."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":149,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":7,"id":"eb516ce1_07934dc7","line":146,"range":{"start_line":144,"start_character":54,"end_line":146,"end_character":23},"in_reply_to":"0d18328a_1189f40f","updated":"2026-06-26 13:13:40.000000000","message":"I agree with this suggestion, while reading the `oldest` criteria, another want that came to mind is one based on allocation size. Giving a sorted list is a good solution imo","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":146,"context_line":"  resource utilization."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":149,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":7,"id":"94923ddc_eb1ee316","line":146,"range":{"start_line":144,"start_character":54,"end_line":146,"end_character":23},"in_reply_to":"55af2975_0fcfa136","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* **oldest (default)**: Instances are sorted by their creation"},{"line_number":143,"context_line":"  timestamp. The oldest preemptible instances are preempted first."},{"line_number":144,"context_line":"  This gives newer instances chance to do their jobs. If two instances"},{"line_number":145,"context_line":"  were created at the same time, the tie-break criteria is based on"},{"line_number":146,"context_line":"  resource utilization."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* **low-utilization**: Instances are sorted by their current resource"},{"line_number":149,"context_line":"  utilization (CPU and RAM). The least active instances are preempted"}],"source_content_type":"text/x-rst","patch_set":7,"id":"55af2975_0fcfa136","line":146,"range":{"start_line":144,"start_character":54,"end_line":146,"end_character":23},"in_reply_to":"eb516ce1_07934dc7","updated":"2026-06-30 21:33:07.000000000","message":"I pushed a new change to this section, I think it addresses this thread. Wdyt?","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"a4b3955a453e1c830639a7053ea39821ef510609","unresolved":true,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"972b5aed_7b30f93f","line":182,"updated":"2026-06-25 12:46:42.000000000","message":"I\u0027d add an indicator that express how many preemtible instances are not-preemtped. Could be absolute value, percentage, etc... but i think would be useful for operators.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"fef8184f_cda783ae","line":182,"in_reply_to":"216d6c1f_e7d0112d","updated":"2026-07-01 13:47:58.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":true,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"f9a09cfc_35c705e1","line":182,"in_reply_to":"216d6c1f_e7d0112d","updated":"2026-07-01 13:19:30.000000000","message":"sorry, i couldn\u0027t find the new indicators you mentioned. I think a single one with the reamining preemptable instances may be enough but whatever you find easy.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"c773c3a8_76dcdd26","line":182,"in_reply_to":"972b5aed_7b30f93f","updated":"2026-06-25 16:31:04.000000000","message":"maybe is that perhasp a better value the preempted_instances_count\n\ni guess you can have both.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"216d6c1f_e7d0112d","line":182,"in_reply_to":"c773c3a8_76dcdd26","updated":"2026-06-30 21:33:07.000000000","message":"Ack. I added two new indicators 1) remaining_instances_count to represent how many instances were not preempted and 2) preemptible_instances_count to represent how many instances are preemptible and considered in the strategy.\n\nWith these two + `preempted_instances_count` the operator can calculate the percentages.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":179,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":180,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":181,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Actions"},{"line_number":184,"context_line":"--------"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"4fd22e2b_f7f588f7","line":182,"in_reply_to":"c773c3a8_76dcdd26","updated":"2026-06-30 18:31:38.000000000","message":"that could be a percentage too. The amount of instances preempted from the total number of preemptable instances. E.g: 27% of the preemptible intances will be terminated with the proposed solution.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":203,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"},{"line_number":204,"context_line":"directory."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Their schema is quite simple because we only need to know what is the"},{"line_number":207,"context_line":"instance ID to perform the given action."}],"source_content_type":"text/x-rst","patch_set":7,"id":"61101de1_bd93ef8d","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":10},"updated":"2026-06-25 16:31:04.000000000","message":"nit: that is the cuurent patter but im sort of inclidend to reorganise that later\not group by resouce tyep\n\ni.e. one file for all instance actions one file for all volume action one for all compute node actions ectra.\n\nbut yes this is following the exsiting pattern so its ok.\n\nthe curret pattern has some extra boiler plant like imorting nova_helper ectra in may files.\n\nthis is mostly out of scope of your spec but might be nice to cleanup before or after this feature is added.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":203,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"},{"line_number":204,"context_line":"directory."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Their schema is quite simple because we only need to know what is the"},{"line_number":207,"context_line":"instance ID to perform the given action."}],"source_content_type":"text/x-rst","patch_set":7,"id":"cc544e8d_dfb5d9e3","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":10},"in_reply_to":"61101de1_bd93ef8d","updated":"2026-06-30 21:33:07.000000000","message":"Ack. If you think it is ok I can start implementing these action in `instance_actions.py` file or something like that.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fe23de60f519c5e29b0f7591a0850b12b61472e8","unresolved":true,"context_lines":[{"line_number":216,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    Delete:"},{"line_number":219,"context_line":"        * The instance should exists"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    Shelve:"},{"line_number":222,"context_line":"        * The instance should exists"}],"source_content_type":"text/x-rst","patch_set":7,"id":"57a52caf_613d54cd","line":219,"updated":"2026-06-26 13:13:40.000000000","message":"nit \n```suggestion\n        * The instance should exist\n```","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":216,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    Delete:"},{"line_number":219,"context_line":"        * The instance should exists"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    Shelve:"},{"line_number":222,"context_line":"        * The instance should exists"}],"source_content_type":"text/x-rst","patch_set":7,"id":"30cfac45_8692016a","line":219,"in_reply_to":"57a52caf_613d54cd","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fe23de60f519c5e29b0f7591a0850b12b61472e8","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        * The instance should exists"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    Shelve:"},{"line_number":222,"context_line":"        * The instance should exists"},{"line_number":223,"context_line":"        * The instance shouldn\u0027t be in *SHELVED* state"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Postconditions:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9e5d0c22_53c8bc35","line":222,"updated":"2026-06-26 13:13:40.000000000","message":"nit, same as above\n```suggestion\n        * The instance should exist\n```","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        * The instance should exists"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    Shelve:"},{"line_number":222,"context_line":"        * The instance should exists"},{"line_number":223,"context_line":"        * The instance shouldn\u0027t be in *SHELVED* state"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Postconditions:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9e0c4ed9_b88899b7","line":222,"in_reply_to":"9e5d0c22_53c8bc35","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        * The instance should no longer exist"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    Shelve:"},{"line_number":232,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Alternatives"},{"line_number":235,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"efdcfedd_a3e6487e","line":232,"range":{"start_line":232,"start_character":37,"end_line":232,"end_character":44},"updated":"2026-06-25 16:31:04.000000000","message":"that need to be a little mroe generals it should be SHELVED or SHELVE_OFFLOADED\n\nshelving an instnace does not guarentee it is removed form the host imdiealy\n\nthat is the default but there is a cofnig optin to allow delaying that for a perod of time that period default to 0 second so in most case you cod directly to SHELVE_OFFLOADED\nbut shelved instance still are on the host and are allcoated resouces until they are offloaded. they are just stopped on the host.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        * The instance should no longer exist"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    Shelve:"},{"line_number":232,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Alternatives"},{"line_number":235,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"55f7b8e3_23d23b3e","line":232,"range":{"start_line":232,"start_character":37,"end_line":232,"end_character":44},"in_reply_to":"efdcfedd_a3e6487e","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d16b36b2744fc55007ff9c57d767f7578e78113","unresolved":true,"context_lines":[{"line_number":260,"context_line":"---------------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Performance Impact"},{"line_number":265,"context_line":"------------------"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"None"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"Other deployer impact"},{"line_number":270,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"010f2c08_ac490836","line":267,"range":{"start_line":263,"start_character":1,"end_line":267,"end_character":4},"updated":"2026-06-25 16:44:13.000000000","message":"by the way if we were to dicuss the sorting impleaiton it could be here but i dont think that is stricly requried","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":260,"context_line":"---------------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Performance Impact"},{"line_number":265,"context_line":"------------------"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"None"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"Other deployer impact"},{"line_number":270,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"da08ccbe_da0eb4e1","line":267,"range":{"start_line":263,"start_character":1,"end_line":267,"end_character":4},"in_reply_to":"010f2c08_ac490836","updated":"2026-07-01 13:47:58.000000000","message":"Acknowledged","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"77b6a6d3_5c37c31a","line":278,"updated":"2026-06-25 16:31:04.000000000","message":"we meed tp fill out the impact esctions but i think the overall design is movign in the right direction\n\nthere is no data model imapct or rest api impact to this nessiarly\ni also do not see an y security impact top this.\n\nnotificaon shoudl be none as itre really jsut goign to use the geneic oens we have for starting/endign an autit ectra unless you want to have a speciif new notrifciaon or modify the payload in a way that requires an obejct change.\n\nend user impact is minimal or none same for performance deployer adn devleoper impact\n\nthe only thing we really need to call out in other deployer impact and end user impact is that to opt into premetabel isntance operators need to create new flavor and or end users need to express the policy via metadta\n\nalso we need to define a precendce relationship\n\nso if the flavor says somthing it shoudl win over what on the per isntance metadata\n\nso if the flavor is premetable but doens not specify the action the inastance metadta shoudl be able to choose but ti can set premeable\u003dfalse we need ot have the flavor values when set overied the instnace level policy.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":true,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"b0257f49_254c7ea3","line":278,"in_reply_to":"77b6a6d3_5c37c31a","updated":"2026-06-30 21:33:07.000000000","message":"We already have a default value for the policy, so the default policy always win over the others.\n\nI think we should never consider the instance metadata because they can be easily modified by their users and as a consequence override the operator-defined value.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"874cbbec_bf9976c8","line":278,"in_reply_to":"8dc29e21_62329b81","updated":"2026-07-01 19:12:48.000000000","message":"+1 on removing metadata option","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":false,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"c2434be2_d7402ffa","line":278,"in_reply_to":"8dc29e21_62329b81","updated":"2026-07-01 19:35:06.000000000","message":"Acknowledged","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":true,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"8dc29e21_62329b81","line":278,"in_reply_to":"93cb2042_fd08fce2","updated":"2026-07-01 18:13:53.000000000","message":"I don`t see a use case for this at this point. But we could add in the future if needed. I removed the reference to the instance metadata as a mandatory field.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":275,"context_line":"----------------"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"None"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"Implementation"},{"line_number":280,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"93cb2042_fd08fce2","line":278,"in_reply_to":"b0257f49_254c7ea3","updated":"2026-07-01 13:47:58.000000000","message":"so the audit policy shoudl be the lowest precedice\n\nwe can remove all suppprot for instnace metadta if you prefer\nbut it woudl never be ok for audit parmater to overried instnace metadata\nit is ok flor the flavor to od it but the audit parameters have to be the lowest level of precidence","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"4ee41717_d6068263","line":292,"range":{"start_line":290,"start_character":0,"end_line":292,"end_character":0},"updated":"2026-06-30 18:31:38.000000000","message":"We need to fill this section","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"a59dad35_c14207db","line":292,"range":{"start_line":290,"start_character":0,"end_line":292,"end_character":0},"in_reply_to":"4ee41717_d6068263","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"46003869a997f06e2b6ba2b538462e0f4303c6df","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"f2a84ae2_68975c43","line":292,"range":{"start_line":290,"start_character":0,"end_line":292,"end_character":0},"in_reply_to":"5553aa2b_3eb683a5","updated":"2026-07-01 12:20:25.000000000","message":"I think now it is done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"10b103870a1a2aabf96c149cfcfcd36cf8d9ea80","unresolved":true,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5553aa2b_3eb683a5","line":292,"range":{"start_line":290,"start_character":0,"end_line":292,"end_character":0},"in_reply_to":"a59dad35_c14207db","updated":"2026-07-01 12:06:41.000000000","message":"Still missing, but can be a very short list of work items","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6bcf2fed8275a5ebbf4ea12015b8fc2c4a4c5683","unresolved":true,"context_lines":[{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"cc5aca18_4449287e","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":12},"updated":"2026-06-30 18:31:38.000000000","message":"We need to agree in the expect test coverage, before starting the implementation.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"52cc47b3_c721ac86","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":12},"in_reply_to":"cc5aca18_4449287e","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"119c8ff2326e422b466097c4901c4013e5a686a7","unresolved":true,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"Primary assignee:"},{"line_number":286,"context_line":"  winiciusallan"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"*writing...*"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"References"},{"line_number":309,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"23b7bfab_0e7f84e5","line":306,"range":{"start_line":287,"start_character":1,"end_line":306,"end_character":12},"updated":"2026-06-25 16:31:04.000000000","message":"these need to be filed out but the work items can be relitivly short\n\ntesting will compiese unit tests and tempest tests\n\n\ndocs will need a new doc for the goal/stragy and some example recipies for auit templates show the diffent ways ot use it.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"4375eb4adce8537b33077c30ee92bf54082befd1","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"Primary assignee:"},{"line_number":286,"context_line":"  winiciusallan"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"*writing...*"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"References"},{"line_number":309,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"79da002a_44ca1fa2","line":306,"range":{"start_line":287,"start_character":1,"end_line":306,"end_character":12},"in_reply_to":"23b7bfab_0e7f84e5","updated":"2026-06-30 21:33:07.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"10b103870a1a2aabf96c149cfcfcd36cf8d9ea80","unresolved":true,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"Primary assignee:"},{"line_number":286,"context_line":"  winiciusallan"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"*writing...*"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"References"},{"line_number":309,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d968583b_2d53b170","line":306,"range":{"start_line":287,"start_character":1,"end_line":306,"end_character":12},"in_reply_to":"79da002a_44ca1fa2","updated":"2026-07-01 12:06:41.000000000","message":"Still missing documentation that will require updates.","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"46003869a997f06e2b6ba2b538462e0f4303c6df","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"Primary assignee:"},{"line_number":286,"context_line":"  winiciusallan"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"Work Items"},{"line_number":289,"context_line":"----------"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"*writing...*"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Dependencies"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Testing"},{"line_number":299,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"*writing...*"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Documentation Impact"},{"line_number":304,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"*writing...*"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"References"},{"line_number":309,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"f090d0c9_7fd65b98","line":306,"range":{"start_line":287,"start_character":1,"end_line":306,"end_character":12},"in_reply_to":"d968583b_2d53b170","updated":"2026-07-01 12:20:25.000000000","message":"Done","commit_id":"7a876c51ad90d5d56abd9bd4631612796918b700"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":33,"context_line":"especially because of the high costs associated with it--both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances `[1]`_ `[2]`_. That is, offer instances to use the spare"}],"source_content_type":"text/x-rst","patch_set":8,"id":"f94a5aa3_3d52b44c","line":36,"updated":"2026-06-30 21:46:17.000000000","message":"Grammar error: \u0027underutilization resources\u0027 is missing \u0027of\u0027 - should read \u0027underutilization of resources\u0027.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Impairs readability of the core problem statement, which is the most-read part of the spec.\n\n**Suggestion**:\nChange \u0027lead to underutilization resources\u0027 to \u0027lead to underutilization of resources\u0027.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"}],"source_content_type":"text/x-rst","patch_set":8,"id":"e8b3c8ad_c18227bf","line":49,"updated":"2026-06-30 21:46:17.000000000","message":"Use Cases use curly Unicode apostrophes (I\u0027ll) while the rest of the spec uses straight ASCII; the template favors plain ASCII text.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Consistent ASCII avoids encoding surprises across editors, keeps diffs clean, and improves grep-ability of the spec text.\n\n**Recommendation**:\nReplace the curly apostrophes on lines 49, 52, and 57 with straight ASCII apostrophes for consistency with the rest of the document.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"10b103870a1a2aabf96c149cfcfcd36cf8d9ea80","unresolved":true,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"32c32584_f81e4007","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"updated":"2026-07-01 12:06:41.000000000","message":"What is not clear to me is what would be the default sorting approach, or it will be mandatory for users to provide at least one preemption_preference?","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"693070fb_eeee15df","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"in_reply_to":"288026b9_3228658a","updated":"2026-07-01 13:47:58.000000000","message":"it would be clenaer to make it mandatory but a reasonable defautl i think woudl be age.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"46003869a997f06e2b6ba2b538462e0f4303c6df","unresolved":true,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"288026b9_3228658a","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"in_reply_to":"32c32584_f81e4007","updated":"2026-07-01 12:20:25.000000000","message":"I think we can make this field mandatory and document this on the \"Deployer impact\" so the operators/end users know that they need to set this configuration.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":true,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"801e1545_a9dfdfea","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"in_reply_to":"693070fb_eeee15df","updated":"2026-07-01 18:13:53.000000000","message":"Added. Let me know if you think it is good now.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"d12b634a_25b99c8d","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"in_reply_to":"801e1545_a9dfdfea","updated":"2026-07-02 11:07:36.000000000","message":"+1, having age as the default is a reasonable choice","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":178,"context_line":"tuple-projection model (evaluating criteria sequentially from left to right)"},{"line_number":179,"context_line":"to ensure a deterministic priority chain::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    preemption_preference \u003d [(\u0027key1\u0027, \u0027dir1\u0027), (\u0027key2\u0027, \u0027dir2\u0027), ...]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Supported keys include:"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"818575bf_87f84b2a","line":181,"range":{"start_line":181,"start_character":4,"end_line":181,"end_character":25},"in_reply_to":"d12b634a_25b99c8d","updated":"2026-07-09 19:46:12.000000000","message":"Acknowledged","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":195,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":196,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This generalized configuration allows operators to encode their"},{"line_number":199,"context_line":"specific economic intent without requiring separate hardcoded"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5ee9f24c_5db7c108","line":196,"updated":"2026-06-30 21:46:17.000000000","message":"Direction abbreviations in preemption_preference use \u0027acc\u0027 (ascending) and \u0027dec\u0027 (descending); \u0027asc\u0027/\u0027desc\u0027 are far more conventional and self-documenting.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Using \u0027asc\u0027/\u0027desc\u0027 matches operator expectations from SQL, CLI sort flags, and other OpenStack tooling, reducing configuration mistakes.\n\n**Recommendation**:\nChange \u0027acc\u0027/\u0027dec\u0027 to \u0027asc\u0027/\u0027desc\u0027 in the supported-keys list and both example tuples (lines 196, 204, 207), or fully spell out \u0027ascending\u0027/\u0027descending\u0027.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":213,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":216,"context_line":"criterias:"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":219,"context_line":"  instances. This is important because it is part of the soluction"}],"source_content_type":"text/x-rst","patch_set":8,"id":"e4b8a48f_f74ea9e8","line":216,"updated":"2026-06-30 21:46:17.000000000","message":"\u0027criterias\u0027 is not a word - \u0027criteria\u0027 is already plural. Used in \u0027calculated based on the following criterias\u0027.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Grammar error in the efficacy-indicators section; minor but visible to all spec readers.\n\n**Suggestion**:\nReplace \u0027criterias\u0027 with \u0027criteria\u0027.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":216,"context_line":"criterias:"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":219,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":220,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":221,"context_line":"  possible."},{"line_number":222,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ef304204_a20eab3a","line":219,"updated":"2026-06-30 21:46:17.000000000","message":"Typo: \u0027soluction\u0027 should be \u0027solution\u0027 - \u0027it is part of the soluction release the necessary resources\u0027.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: Misspelling in a specification that operators and contributors read; reduces professional polish of the approved spec.\n\n**Suggestion**:\nRewrite to: \u0027because it is part of the solution to release the necessary resources with as few instances as possible.\u0027 Also fixes the missing \u0027to\u0027/\u0027of\u0027.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":267,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":8,"id":"83acac58_7fe4b2b8","line":264,"updated":"2026-06-30 21:46:17.000000000","message":"Terminology is inconsistent for the core property/tag. The flavor property is \u0027lifecycle:preemptable\u0027 (lines 151, 334) while the feature/instances are \u0027preemptible\u0027 throughout; the policy key is \u0027lifecycle:preempt_policy\u0027 (264) while the strategy parameter is \u0027preemption_mode\u0027 (259).\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Two different property key spellings (preemptable vs preempt_policy) and two different mode words (preempt vs preemption) make the config surface ambiguous and error-prone for operators and implementers.\n\n**Suggestion**:\nPick one spelling for the property family (e.g. \u0027lifecycle:preemptible\u0027 and \u0027lifecycle:preemption_policy\u0027) or explicitly justify the split, and state the canonical property key in a single named definition.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":308,"context_line":"REST API impact"},{"line_number":309,"context_line":"---------------"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"None"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Security impact"},{"line_number":314,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"41fef0f0_7a671007","line":311,"updated":"2026-06-30 21:46:17.000000000","message":"REST API impact is \u0027None\u0027, yet the spec introduces new strategy input parameters (preemption_mode, preemption_preference, min_instance_age, *_free_percentage) plus new action schemas (delete.py, shelve.py) invoked over the API.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: New parameters accepted by the strategy/action API are unversioned and undocumented; the template states such API changes must be supported forever. Risk of confusing or breaking API consumers.\n\n**Priority**: Before merge\n**Why This Matters**: The template REST API section and the project\u0027s APIImpact rule require documenting method type, parameters, error codes and JSON schema for any API change. These new parameters and action schemas qualify.\n\n**Recommendation**:\nDocument each new strategy parameter (name, type, default, accepted values, validation) and the delete/shelve action request/response schemas. Add the APIImpact footer to the commit message if these reach the public Watcher API.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":313,"context_line":"Security impact"},{"line_number":314,"context_line":"---------------"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"None"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Notifications impact"},{"line_number":319,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"844bc31b_063fc9c6","line":316,"updated":"2026-06-30 21:46:17.000000000","message":"Security impact section says only \u0027None\u0027, but the feature deliberately deletes or shelves tenant-owned instances. This is the most security-relevant capability Watcher can perform and needs an actual analysis per the spec template\u0027s mandatory security checklist.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: A misconfiguration or privilege boundary error could let Watcher terminate instances never intended to be preemptible, destroying tenant data/workloads, or enable cross-tenant resource exhaustion.\n\n**Priority**: Before merge\n**Why This Matters**: The template Security impact section requires addressing privilege escalation, parsing of user-provided data (flavor/metadata tags drive preemption), and resource-exhaustion vectors - all directly relevant to a feature that reaps instances.\n\n**Recommendation**:\nReplace \u0027None\u0027 with analysis covering: (1) how lifecycle:preemptable is trusted and what if a tenant sets it on another tenant\u0027s flavor; (2) which roles/audits trigger preemption; (3) blast-radius controls against runaway/cross-tenant deletion; (4) confirmation no elevated Nova privileges are required.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"None"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Other end user impact"},{"line_number":324,"context_line":"---------------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5bfd13ae_cd23d64f","line":323,"updated":"2026-06-30 21:46:17.000000000","message":"\u0027Other end user impact\u0027 section has no body - the header is immediately followed by the \u0027Performance Impact\u0027 header, leaving the section empty. The template requires writing \u0027None\u0027 rather than leaving a section blank.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: An empty section is non-compliant with the template instruction \u0027Please do not delete any sections... If you have nothing to say for a whole section, just write: None\u0027 and renders as an empty heading in built docs.\n\n**Priority**: Before merge\n**Why This Matters**: Template compliance is the top review priority for this specs repository. An empty section reads as an oversight rather than a deliberate \u0027not applicable\u0027.\n\n**Recommendation**:\nAdd \u0027None\u0027 (or, better, note the python-watcherclient impact since this feature adds strategy parameters a CLI user would set) directly under the \u0027Other end user impact\u0027 header before \u0027Performance Impact\u0027.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"*writing...*"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"Documentation Impact"},{"line_number":369,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"4092ceb8_46ea01a2","line":366,"updated":"2026-06-30 21:46:17.000000000","message":"Work Items, Testing, and Documentation Impact sections still contain the placeholder \u0027*writing...*\u0027 instead of content.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: These template-mandated sections are blank; for an \u0027approved\u0027 spec the Testing approach (unit vs tempest, how preemption selection is verified) and Work Items are expected content, not placeholders.\n\n**Suggestion**:\nFill in Testing (scenarios: candidate filtering, stable-sort determinism, min_instance_age guard, threshold satisfaction), Work Items (strategy, delete/shelve actions, config options, client), and Documentation Impact before or as part of approval.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"10b103870a1a2aabf96c149cfcfcd36cf8d9ea80","unresolved":true,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"*writing...*"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"Documentation Impact"},{"line_number":369,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"d816204a_f228e49e","line":366,"in_reply_to":"4092ceb8_46ea01a2","updated":"2026-07-01 12:06:41.000000000","message":"still missing this.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":false,"context_lines":[{"line_number":363,"context_line":"Testing"},{"line_number":364,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"*writing...*"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"Documentation Impact"},{"line_number":369,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ec25c4c9_82aac67d","line":366,"in_reply_to":"d816204a_f228e49e","updated":"2026-07-01 13:47:58.000000000","message":"this si done but we need to refine it","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ca6507736609729f8910de738ad082a614d704af","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":386,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":8,"id":"f307be47_4e313813","line":385,"updated":"2026-06-30 21:46:17.000000000","message":"Reference [3] appears in the References section but has no matching \u0027.. _[3]:\u0027 anchor definition (only [1] and [2] define anchors), making it inconsistent with the other references and a malformed RST citation entry.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Broken/inconsistent reference formatting; the Sphinx docs build runs with -W (warnings as errors), so this can fail the gate. The Red Hat downstream link is effectively unreachable via the citation mechanism.\n\n**Priority**: Before merge\n**Why This Matters**: watcher-specs builds docs with -W --keep-going, treating warnings as errors. An inconsistent/missing reference anchor is a concrete build risk and reduces traceability of the downstream RFE.\n\n**Recommendation**:\nEither add the matching \u0027.. _[3]:\u0027 anchor line above the [3] entry (mirroring [1] and [2]) or convert all three references to a plain bulleted list so the RST is consistent and valid.","commit_id":"19f1a2c46846bdf8ab5489d18ce6c204c61c77a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":30,"context_line":"providers need to be prepared for high demand, as well as for low"},{"line_number":31,"context_line":"demand. This necessity surfaces a challenge when managing cloud"},{"line_number":32,"context_line":"environments: avoid waste of resources when the demand is low,"},{"line_number":33,"context_line":"especially because of the high costs associated with it--both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."}],"source_content_type":"text/x-rst","patch_set":9,"id":"b6d900eb_5ac761f1","line":33,"range":{"start_line":33,"start_character":55,"end_line":33,"end_character":57},"updated":"2026-07-01 19:35:06.000000000","message":"nit: this should proably be a ,\nem-dashes are rarely used in English writing.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"providers need to be prepared for high demand, as well as for low"},{"line_number":31,"context_line":"demand. This necessity surfaces a challenge when managing cloud"},{"line_number":32,"context_line":"environments: avoid waste of resources when the demand is low,"},{"line_number":33,"context_line":"especially because of the high costs associated with it--both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."}],"source_content_type":"text/x-rst","patch_set":9,"id":"40beed96_b7dcbf09","line":33,"range":{"start_line":33,"start_character":55,"end_line":33,"end_character":57},"in_reply_to":"b6d900eb_5ac761f1","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":43,"context_line":"collected from various exporters to make a better decision about which"},{"line_number":44,"context_line":"instance will be preempted."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"}],"source_content_type":"text/x-rst","patch_set":9,"id":"b769ab35_8a3e19e2","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":9},"updated":"2026-07-01 19:35:06.000000000","message":"these are not great","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"93d1c5c0532c157773b39a8d74252825d49f191e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"collected from various exporters to make a better decision about which"},{"line_number":44,"context_line":"instance will be preempted."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"}],"source_content_type":"text/x-rst","patch_set":9,"id":"45dbd23f_6dd1528d","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":9},"in_reply_to":"b769ab35_8a3e19e2","updated":"2026-07-02 11:24:46.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"},{"line_number":53,"context_line":"  preemptible instances, considering that is the normal trend of spot"},{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7e25b34f_c499cd0c","line":51,"range":{"start_line":49,"start_character":2,"end_line":51,"end_character":1},"updated":"2026-07-01 19:35:06.000000000","message":"```suggestion\n* As a public cloud, i can offer my spare capacity at a discounted rate.\n```","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"},{"line_number":53,"context_line":"  preemptible instances, considering that is the normal trend of spot"},{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"}],"source_content_type":"text/x-rst","patch_set":9,"id":"e58326bf_d330a127","line":51,"range":{"start_line":49,"start_character":2,"end_line":51,"end_character":1},"in_reply_to":"7e25b34f_c499cd0c","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"},{"line_number":53,"context_line":"  preemptible instances, considering that is the normal trend of spot"},{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"},{"line_number":55,"context_line":"  workload stopped by the provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* In the context of OpenStack CI, as an infrastructure donor, I’ll be"},{"line_number":58,"context_line":"  able to provide compute resources and use my spare capacity, but"},{"line_number":59,"context_line":"  when facing lack of resources and a paying customer needs an"}],"source_content_type":"text/x-rst","patch_set":9,"id":"99296476_d24bec60","line":56,"range":{"start_line":52,"start_character":2,"end_line":56,"end_character":1},"updated":"2026-07-01 19:35:06.000000000","message":"```suggestion\n* As a paying user, i can save money by running batch or non critial\nworkloads on a vm teir with a minim time before termination.\n\n```","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"* As a public cloud, I’ll be able to use my spare capacity and sell it"},{"line_number":50,"context_line":"  for the customers."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I’ll be able to pay way less when using"},{"line_number":53,"context_line":"  preemptible instances, considering that is the normal trend of spot"},{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"},{"line_number":55,"context_line":"  workload stopped by the provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* In the context of OpenStack CI, as an infrastructure donor, I’ll be"},{"line_number":58,"context_line":"  able to provide compute resources and use my spare capacity, but"},{"line_number":59,"context_line":"  when facing lack of resources and a paying customer needs an"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ffdbe0bb_8f5e0b22","line":56,"range":{"start_line":52,"start_character":2,"end_line":56,"end_character":1},"in_reply_to":"99296476_d24bec60","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"},{"line_number":55,"context_line":"  workload stopped by the provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* In the context of OpenStack CI, as an infrastructure donor, I’ll be"},{"line_number":58,"context_line":"  able to provide compute resources and use my spare capacity, but"},{"line_number":59,"context_line":"  when facing lack of resources and a paying customer needs an"},{"line_number":60,"context_line":"  instance, it will preempt the CI and rerun it elsewhere when it is"},{"line_number":61,"context_line":"  possible."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"a439408b_1dad5333","line":61,"range":{"start_line":57,"start_character":1,"end_line":61,"end_character":11},"updated":"2026-07-01 19:35:06.000000000","message":"As a university or private hpc cloud i can allow teams to pool there hardware to deploy open source, fault-tolerant, and highly scalable job scheduling systems like Slurm while still having dedicated capacity","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  instances market, but aware of the consequences of having my"},{"line_number":55,"context_line":"  workload stopped by the provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* In the context of OpenStack CI, as an infrastructure donor, I’ll be"},{"line_number":58,"context_line":"  able to provide compute resources and use my spare capacity, but"},{"line_number":59,"context_line":"  when facing lack of resources and a paying customer needs an"},{"line_number":60,"context_line":"  instance, it will preempt the CI and rerun it elsewhere when it is"},{"line_number":61,"context_line":"  possible."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Proposed change"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"18694f27_776a3160","line":61,"range":{"start_line":57,"start_character":1,"end_line":61,"end_character":11},"in_reply_to":"a439408b_1dad5333","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"This spec adds a new strategy called **PreemptInstances**. Its functionality is"},{"line_number":79,"context_line":"described below."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Optimization Target"}],"source_content_type":"text/x-rst","patch_set":9,"id":"2e377f58_b85d71b4","line":78,"range":{"start_line":78,"start_character":37,"end_line":78,"end_character":57},"updated":"2026-07-01 19:35:06.000000000","message":"so to follow our nameing stagy \n\nhttps://docs.openstack.org/watcher/latest/strategies/workload-stabilization.html\n\nthe display name: `Workload Preemption`\nand the goal iguess woudl be `workload_optimization`\n\nit would also be ok to use\n\n`Server Preemption` and `server_optimization`\nor\n`Instance Preemption` and `instance_optimization`\n\nwe try to mostly name thing by the resource followed by the action\n\n\nim propsoing `workload_optimization` as the goal name as there may be other\n\n`workload_optimization` stragies in teh futrue liek SLA enforcement","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Strategy"},{"line_number":76,"context_line":"--------"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"This spec adds a new strategy called **PreemptInstances**. Its functionality is"},{"line_number":79,"context_line":"described below."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Optimization Target"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4038ae4a_906b4d16","line":78,"range":{"start_line":78,"start_character":37,"end_line":78,"end_character":57},"in_reply_to":"2e377f58_b85d71b4","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"97d19329_6b908d3d","line":130,"updated":"2026-07-01 12:49:20.000000000","message":"Sorting direction token is inconsistent and contradictory: the IMPORTANT box says \u0027weighted-utilization asc\u0027 (line 130) while the parameter definition and examples use \u0027acc\u0027 (lines 196, 204, 207). A reader cannot determine which token the implementation will actually accept.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: If the implemented preemption_preference parser expects one token and the spec documents both, operators will copy the wrong one and the strategy will reject their configuration at audit time, or the design is ambiguous enough to cause implementation/review disagreement.\n\n**Priority**: Before merge\n**Why This Matters**: The preemption_preference list of key-direction tuples is the central configuration knob for this strategy. Two different abbreviations for the same direction in the same section is a direct correctness/contract contradiction that must be resolved before implementation.\n\n**Recommendation**:\nPick one token and use it everywhere. Prefer \u0027asc\u0027 (the conventional abbreviation for ascending) over \u0027acc\u0027. Update lines 130, 196, 204, and 207 to agree, and state the full allowed direction vocabulary (e.g. \u0027asc\u0027/\u0027desc\u0027 or \u0027asc\u0027/\u0027dec\u0027) explicitly in the Generalized Priority Sorting subsection.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering function"},{"line_number":145,"context_line":"that accepts either a raw list of instances or a comprehensive cluster data"},{"line_number":146,"context_line":"model. This function evaluates every instance against a set of invariants to"},{"line_number":147,"context_line":"build the baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* **Mandatory Invariants**: Instances are immediately excluded unless they"}],"source_content_type":"text/x-rst","patch_set":9,"id":"01a19bf1_c6e1f5bf","line":146,"range":{"start_line":145,"start_character":13,"end_line":146,"end_character":6},"updated":"2026-07-01 13:47:58.000000000","message":"i was expecting use to choose oen or the other not detail both\n\ni think the cluder data mdoel is proably mroe corect but th einstance is also fine if we also pass the cluster data model.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering function"},{"line_number":145,"context_line":"that accepts either a raw list of instances or a comprehensive cluster data"},{"line_number":146,"context_line":"model. This function evaluates every instance against a set of invariants to"},{"line_number":147,"context_line":"build the baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* **Mandatory Invariants**: Instances are immediately excluded unless they"}],"source_content_type":"text/x-rst","patch_set":9,"id":"eb3be2ac_ca34011f","line":146,"range":{"start_line":145,"start_character":13,"end_line":146,"end_character":6},"in_reply_to":"01a19bf1_c6e1f5bf","updated":"2026-07-01 19:12:48.000000000","message":"I think that we can leave this to the implementation phase, wdyt?","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7f05cc62c3ff1f5fabf8f86cbf25099cacaf3b2e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering function"},{"line_number":145,"context_line":"that accepts either a raw list of instances or a comprehensive cluster data"},{"line_number":146,"context_line":"model. This function evaluates every instance against a set of invariants to"},{"line_number":147,"context_line":"build the baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* **Mandatory Invariants**: Instances are immediately excluded unless they"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa4083ce_e0ba3578","line":146,"range":{"start_line":145,"start_character":13,"end_line":146,"end_character":6},"in_reply_to":"106d9f36_c691a0e5","updated":"2026-07-07 14:51:01.000000000","message":"Ack, we can decide that during the implementation phase.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering function"},{"line_number":145,"context_line":"that accepts either a raw list of instances or a comprehensive cluster data"},{"line_number":146,"context_line":"model. This function evaluates every instance against a set of invariants to"},{"line_number":147,"context_line":"build the baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* **Mandatory Invariants**: Instances are immediately excluded unless they"}],"source_content_type":"text/x-rst","patch_set":9,"id":"106d9f36_c691a0e5","line":146,"range":{"start_line":145,"start_character":13,"end_line":146,"end_character":6},"in_reply_to":"eb3be2ac_ca34011f","updated":"2026-07-01 22:36:01.000000000","message":"I changed this to something more general and we can decide about it afterwards in the implementation phase.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":191,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":192,"context_line":"  instance\u0027s active internal utilization."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":195,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":196,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"23da5e51_f6fa2cd1","line":194,"updated":"2026-07-01 12:49:20.000000000","message":"The spec does not address what data source(s) supply \u0027weighted-utilization\u0027 (instance_cpu_usage_weight, instance_mem_usage_weight) or whether the strategy requires a specific datasource (Ceilometer/Gnocchi/Prometheus). The rest of the design assumes these metrics are available.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators choosing the weighted-utilization preference may deploy the strategy without a metric backend and get silent failures or an empty candidate sort. The preconditions for using this sorting key are unstated.\n\n**Suggestion**:\nState in the Strategy or Preconditions section which datasource/metrics weighted-utilization depends on, and define behaviour when metrics are unavailable (e.g. fall back to allocation-only, or fail the audit with a clear message).","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":213,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"The efficacy of a solution is calculated based on the following"},{"line_number":216,"context_line":"criterias:"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":219,"context_line":"  instances. This is important because it is part of the soluction"}],"source_content_type":"text/x-rst","patch_set":9,"id":"d669ac6e_db996824","line":216,"updated":"2026-07-01 12:49:20.000000000","message":"Multiple spelling and grammar errors reduce clarity in a section that governs disruptive behaviour: \u0027criterias\u0027 (L216, should be \u0027criteria\u0027), \u0027soluction\u0027 (L219, \u0027solution\u0027), and \u0027underutilization resources\u0027 (L36, missing \u0027of\u0027 - should be \u0027underutilization of resources\u0027).\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Errors in the Efficacy Indicators and Problem description sections read as carelessness in a document that will be referenced by implementers and reviewers; \u0027part of the soluction\u0027 in particular obscures the intended meaning.\n\n**Suggestion**:\nFix \u0027criterias\u0027 -\u003e \u0027criteria\u0027 (L216), \u0027soluction\u0027 -\u003e \u0027solution\u0027 (L219), and \u0027underutilization resources\u0027 -\u003e \u0027underutilization of resources\u0027 (L36). Proof-read the full document once more before merge.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95291c2fa4da71c2fac4dcc03be5ff4f72dc455a","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"37028efd_bbbbde15","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"updated":"2026-07-01 13:47:58.000000000","message":"a cloud user can only do that vai selecting a flavour crated by a administrator or using instnace metadata if not set in teh flavor\n\nthe preemption_mode in the audit must have the lowest level of precendence\n\nflavor \u003e instance metadata \u003e audit","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f387d1e_741a3cf3","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"1f2b5036_835a3d43","updated":"2026-07-02 17:01:47.000000000","message":"I think this is already described in the spec with the `preemption_mode` input parameter to define the default policy, and in mandatory invariants we have the flavor property needed for preemptible instances.\n\nMay I resolve this thread?","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"b21c7af2_8c7b4cf0","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"37028efd_bbbbde15","updated":"2026-07-01 18:13:53.000000000","message":"If we decide to drop the default policy and instance metadata, we can drop this and make the flavor as the point of information.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ef3fb6c9b77a44987e7de6295e094f6a254c35d8","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1f2b5036_835a3d43","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"632bcfcf_f4e41a8a","updated":"2026-07-02 07:03:52.000000000","message":"+1. I think it\u0027s a reasonable choice.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bf8b06d0_3d6dd8fc","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"7f387d1e_741a3cf3","updated":"2026-07-09 19:46:12.000000000","message":"Acknowledged","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"800c4b61_8271a3cb","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"b21c7af2_8c7b4cf0","updated":"2026-07-01 19:12:48.000000000","message":"I think that we can proceed with 1st) flavor extra spec, and when not set, 2nd) audit input parameter (which can have default set to delete).\nSeems more appropriated to have it associated with the flavor which wuold be associated with a different cost for users.\nIf not set in the flavor, the admin could use a policy and filter instances using model scope.\nSo this will have some flexibility","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":true,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":259,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":260,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":261,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":262,"context_line":"Flavor property."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"632bcfcf_f4e41a8a","line":260,"range":{"start_line":260,"start_character":42,"end_line":260,"end_character":52},"in_reply_to":"b21c7af2_8c7b4cf0","updated":"2026-07-01 19:35:06.000000000","message":"i think that could be a good simplifcation\n\nif we wnat to to supprot other ways of expressing policy later we cna alwasy add that in the next release. so +1 for flaovr extra spec only\n\nso `lifecycle:preemptable\u003dtrue|false` default false if not set\n\nwould make the instance premtable\n\n`lifecycle:preempt_policy\u003dshelve|delete` woudl express the policy with the default\nbeing delete.\n\ndo others agree.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":270,"context_line":"Their schema is quite simple because we only need to know what is the"},{"line_number":271,"context_line":"instance ID to perform the given action."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":".. code-block::"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    {"},{"line_number":276,"context_line":"        \u0027resource_id\u0027: str  # should be a UUID"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1bb7da92_64911c36","line":273,"updated":"2026-07-01 12:49:20.000000000","message":"The Preconditions/Postconditions for the new actions are described but the action schema (lines 273-277) uses a Python-dict literal rather than a JSON schema as shown in the template and the audit-pipeline spec, which use JSON objects with quoted keys.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Consistent JSON formatting matches sibling specs and avoids ambiguity about whether the action payload is JSON or Python.\n\n**Recommendation**:\nRender the action schema as a JSON object with double-quoted keys (e.g. {\"resource_id\": \"\u003cuuid\u003e\"}) and ideally note the required type/UUID validation, matching the style used in audit-pipeline.rst.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    Shelve:"},{"line_number":296,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Alternatives"},{"line_number":299,"context_line":"------------"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"76732c1a_d3c10cb1","line":298,"updated":"2026-07-01 12:49:20.000000000","message":"\u0027Alternatives\u0027 is answered \u0027None\u0027. The spec itself describes two preemption modes (shelve vs delete) and a generalized sorting model explicitly motivated as superior to hardcoded strategies - those are real alternatives worth recording per the template.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Documenting the considered alternatives (e.g. shelve-only vs delete, hardcoded oldest-first vs the generalized sort, or handling this in Nova/the scheduler instead of Watcher) demonstrates the design trade-offs the template asks for.\n\n**Recommendation**:\nBriefly note the shelve-vs-delete trade-off already discussed in \u0027Actions\u0027, why the generalized preemption_preference was chosen over separate hardcoded strategies, and why Watcher (vs Nova) is the right place for this decision logic.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Alternatives"},{"line_number":299,"context_line":"------------"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"None"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"86bf260c_0d0119cf","line":299,"updated":"2026-07-01 12:49:20.000000000","message":"Section heading levels are demoted: \u0027Alternatives\u0027 through \u0027Developer impact\u0027 (lines 299-340) use \u0027-\u0027 underlines instead of the \u0027\u003d\u0027 used in the spec template and sibling specs. This makes them subsections of \u0027Proposed change\u0027 rather than top-level sections, breaking the document outline.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: docutils renders these as nested subsections of \u0027Proposed change\u0027, producing a structurally wrong table of contents and inconsistent section hierarchy versus all other watcher-specs. May also surface as RST warnings during doc builds.\n\n**Priority**: Before merge\n**Why This Matters**: The watcher-specs template and approved sibling specs (e.g. audit-pipeline.rst) consistently render \u0027Alternatives\u0027, \u0027Data model impact\u0027, \u0027REST API impact\u0027, \u0027Security impact\u0027, etc. as \u0027\u003d\u0027 top-level sections. Demoting them silently restructures the spec and diverges from project convention.\n\n**Recommendation**:\nChange the underlines for Alternatives, Data model impact, REST API impact, Security impact, Notifications impact, Other end user impact, Performance Impact, Other deployer impact, and Developer impact from \u0027-\u0027 to \u0027\u003d\u0027 so they are siblings of \u0027Proposed change\u0027. Keep \u0027-\u0027 only for true subsections (Goal, Strategy, Actions) and \u0027^\u0027/\u0027~\u0027 for deeper nesting.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"None"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Data model impact"},{"line_number":304,"context_line":"-----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"887476c9_5bc3ba11","line":303,"updated":"2026-07-01 12:49:20.000000000","message":"The \u0027Data model impact\u0027 and \u0027REST API impact\u0027 sections are bare \u0027None\u0027, but the spec introduces operator-facing parameters (cpu_free_percentage, ram/disk_free_percentage, min_instance_age, preemption_preference, preemption_mode) and metadata keys (lifecycle:preemptable, lifecycle:preempt_policy).\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: While these are strategy input_parameters rather than DB schema changes, listing the full parameter set with types and defaults in one place would make the spec self-contained and ease implementation and client/doc work.\n\n**Recommendation**:\nConsider adding a consolidated parameter table (name, type, default, description) under the Strategy section, and keep \u0027Data model impact\u0027/\u0027REST API impact\u0027 as \u0027None\u0027 only if strictly accurate. At minimum note that python-watcherclient/docs must expose these parameters under \u0027Other end user impact\u0027.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"None"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Security impact"},{"line_number":314,"context_line":"---------------"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bd4cdf25_a25bcb1f","line":313,"updated":"2026-07-01 12:49:20.000000000","message":"\u0027Security impact\u0027 is answered \u0027None\u0027, but preemption forcibly deletes or shelves other users\u0027 instances. The section should at least acknowledge that correct scoping of the lifecycle metadata and restricting who can set preemption_mode on flavors is security-relevant.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: A one-paragraph note that only operators/admins should control preemptible flavors and that mis-scoping could cause unexpected tenant instance loss would pre-empt review questions and align with the template\u0027s security guidance.\n\n**Recommendation**:\nAdd a short note that flavor property and image metadata control who is preemptible, that the strategy operates on allocated (not utilization) data, and that audit RBAC follows the existing Watcher admin policy.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":true,"context_lines":[{"line_number":353,"context_line":"Work Items"},{"line_number":354,"context_line":"----------"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"* Create the new goal"},{"line_number":357,"context_line":"* Add this goal to the list of entrypoints"},{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"}],"source_content_type":"text/x-rst","patch_set":9,"id":"de9a31bb_2a5dab9e","line":357,"range":{"start_line":356,"start_character":0,"end_line":357,"end_character":42},"updated":"2026-07-01 13:19:30.000000000","message":"I\u0027d say creating the goal and adding it to the entrypoints would be the same step, i don\u0027t see a reason to split. If you are just adding tasks that do not imply different commits, no problem from my side.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":false,"context_lines":[{"line_number":353,"context_line":"Work Items"},{"line_number":354,"context_line":"----------"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"* Create the new goal"},{"line_number":357,"context_line":"* Add this goal to the list of entrypoints"},{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4466415a_a00554c3","line":357,"range":{"start_line":356,"start_character":0,"end_line":357,"end_character":42},"in_reply_to":"de9a31bb_2a5dab9e","updated":"2026-07-01 18:13:53.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":true,"context_lines":[{"line_number":357,"context_line":"* Add this goal to the list of entrypoints"},{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"},{"line_number":361,"context_line":"* Add unit and functional tests"},{"line_number":362,"context_line":"* Add strategy documentation and update Goal docs to add the new one"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"007ac582_35211e34","line":360,"range":{"start_line":360,"start_character":0,"end_line":360,"end_character":2},"updated":"2026-07-01 13:19:30.000000000","message":"I\u0027m not sure if this list shows implementation order, but Actions should be created before the strategy itself. Actually, that\u0027s probably the first step i\u0027d do.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":false,"context_lines":[{"line_number":357,"context_line":"* Add this goal to the list of entrypoints"},{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"},{"line_number":361,"context_line":"* Add unit and functional tests"},{"line_number":362,"context_line":"* Add strategy documentation and update Goal docs to add the new one"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"d1d2bcb3_88a18056","line":360,"range":{"start_line":360,"start_character":0,"end_line":360,"end_character":2},"in_reply_to":"007ac582_35211e34","updated":"2026-07-01 18:13:53.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":true,"context_lines":[{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"},{"line_number":361,"context_line":"* Add unit and functional tests"},{"line_number":362,"context_line":"* Add strategy documentation and update Goal docs to add the new one"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"57703ac7_71e88c4f","line":361,"range":{"start_line":361,"start_character":0,"end_line":361,"end_character":2},"updated":"2026-07-01 13:19:30.000000000","message":"functional tests will depend if the functional test framework is merged by then. I\u0027d also mention adding some integration tempest test.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":false,"context_lines":[{"line_number":358,"context_line":"* Create the new strategy"},{"line_number":359,"context_line":"* Add this strategy to the list of entrypoints"},{"line_number":360,"context_line":"* Create new actions"},{"line_number":361,"context_line":"* Add unit and functional tests"},{"line_number":362,"context_line":"* Add strategy documentation and update Goal docs to add the new one"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"23d1c6b1_896d66da","line":361,"range":{"start_line":361,"start_character":0,"end_line":361,"end_character":2},"in_reply_to":"57703ac7_71e88c4f","updated":"2026-07-01 18:13:53.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"fb3f145f6de37dcf80cc1c8cb058f94b0aa860ba","unresolved":true,"context_lines":[{"line_number":374,"context_line":"  sorting, and efficacy indicators), as well as the ``delete`` and"},{"line_number":375,"context_line":"  ``shelve`` actions and their pre/postconditions."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"* A Zuul functional job will deploy the strategy against a devstack"},{"line_number":378,"context_line":"  environment to validate the full preemption flow end-to-end."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Documentation Impact"},{"line_number":381,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1e1a5003_842f0bd9","line":378,"range":{"start_line":377,"start_character":1,"end_line":378,"end_character":62},"updated":"2026-07-01 13:19:30.000000000","message":"this can be expressed as \"new tempest tests will be added for the new strategy which will be executed in the existing check/gate CI jobs\"","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"cc5f48597e327a4bafad61106598382d5c2e6dcf","unresolved":false,"context_lines":[{"line_number":374,"context_line":"  sorting, and efficacy indicators), as well as the ``delete`` and"},{"line_number":375,"context_line":"  ``shelve`` actions and their pre/postconditions."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"* A Zuul functional job will deploy the strategy against a devstack"},{"line_number":378,"context_line":"  environment to validate the full preemption flow end-to-end."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Documentation Impact"},{"line_number":381,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"d74a1680_3c5d23fc","line":378,"range":{"start_line":377,"start_character":1,"end_line":378,"end_character":62},"in_reply_to":"1e1a5003_842f0bd9","updated":"2026-07-01 18:13:53.000000000","message":"Done","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":378,"context_line":"  environment to validate the full preemption flow end-to-end."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"Documentation Impact"},{"line_number":381,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"*writing...*"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"8595f05f_9a687f8b","line":381,"updated":"2026-07-01 12:49:20.000000000","message":"The \u0027Documentation Impact\u0027 section contains only the placeholder text \u0027*writing...*\u0027 and no actual content.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An approved watcher-spec should describe the documentation deliverables (new strategy docs, goal docs, operator guide for the new parameters). The template requires this section; a placeholder signals the spec is not finished.\n\n**Suggestion**:\nReplace the placeholder with the expected documentation impact: new strategy documentation, update to the Goal docs to add the new goal, operator guidance for cpu_free_percentage/ram_free_percentage/disk_free_percentage and preemption_preference/preemption_mode, mirroring how the sibling audit-pipeline spec documents its deliverables.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":385,"context_line":"References"},{"line_number":386,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":".. _[1]:"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"[1] AWS Spot Instances Documentation -"},{"line_number":391,"context_line":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html"}],"source_content_type":"text/x-rst","patch_set":9,"id":"cbd74862_3ef79297","line":388,"updated":"2026-07-01 12:49:20.000000000","message":"Reference link targets use a non-standard, non-functional pattern. \u0027.. _[1]:\u0027 targets are immediately followed by a separate \u0027[1] text - url\u0027 line, leaving the actual URL as plain text rather than a resolved hyperlink. The sibling spec (audit-pipeline.rst) shows the correct watcher-specs convention.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: In rendered docs the AWS and GCP links will not be clickable; the references resolve to empty anchors. This defeats the purpose of citing the external spot-instance precedents the proposal relies on.\n\n**Suggestion**:\nAdopt the named-reference convention used in audit-pipeline.rst: in the body write `\\`AWS Spot Instances\\`_`, and in References define `.. _AWS Spot Instances:\\n   https://docs.aws.amazon.com/...` with the URL on the target line. Alternatively use anonymous backticks (\\`text \u003curl\u003e\\`__).","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"52c3f7233abbbc2a3e79a00eda7268f44346e3d1","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":398,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":9,"id":"faceec39_e2902aa3","line":397,"updated":"2026-07-01 12:49:20.000000000","message":"Reference [3] (Red Hat RHOSRFE-142) is defined in the References section but is never cited anywhere in the body with a `[3]`_ reference, unlike [1] and [2] which are cited on line 39.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: An uncited reference gives no context for why it is included and breaks the symmetry with [1] and [2]. Readers cannot tell which claim the downstream RFE supports.\n\n**Suggestion**:\nEither cite [3] at the relevant point in the Problem description (e.g. where it states OpenStack currently provides no such mechanism), or convert all references to the named-link style and remove the numbered-target scheme entirely.","commit_id":"43da2b31f0ddf3a44210af338b8bd38243998a46"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The objective of this goal is to free resources in used by low"},{"line_number":73,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":74,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":75,"context_line":"priority workloads to use spare capasity while also enabling higher"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e8734c7d_82c51169","line":72,"range":{"start_line":72,"start_character":51,"end_line":72,"end_character":55},"updated":"2026-07-01 19:12:48.000000000","message":"in use?","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Since none of the already implemented Watcher\u0027s goals look fit on this"},{"line_number":70,"context_line":"feature, we will need a new goal."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The objective of this goal is to free resources in used by low"},{"line_number":73,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":74,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":75,"context_line":"priority workloads to use spare capasity while also enabling higher"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e1c45d92_4fe0b90c","line":72,"range":{"start_line":72,"start_character":51,"end_line":72,"end_character":55},"in_reply_to":"e8734c7d_82c51169","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":72,"context_line":"The objective of this goal is to free resources in used by low"},{"line_number":73,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":74,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":75,"context_line":"priority workloads to use spare capasity while also enabling higher"},{"line_number":76,"context_line":"return on investiment when capacity is needed."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Strategy"}],"source_content_type":"text/x-rst","patch_set":10,"id":"acce24df_50bc9455","line":75,"range":{"start_line":75,"start_character":32,"end_line":75,"end_character":40},"updated":"2026-07-01 19:12:48.000000000","message":"capacity","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":72,"context_line":"The objective of this goal is to free resources in used by low"},{"line_number":73,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":74,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":75,"context_line":"priority workloads to use spare capasity while also enabling higher"},{"line_number":76,"context_line":"return on investiment when capacity is needed."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Strategy"}],"source_content_type":"text/x-rst","patch_set":10,"id":"21f3a950_13ce0f24","line":75,"range":{"start_line":75,"start_character":32,"end_line":75,"end_character":40},"in_reply_to":"acce24df_50bc9455","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":153,"context_line":"  they are explicitly annotated as preemptible via their Flavor"},{"line_number":154,"context_line":"  properties (e.g., ``lifecycle:preemptable\u003dtrue``)."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **Conditional Invariants**: The function filters instances based on"},{"line_number":157,"context_line":"  cloud-specific service level agreements (SLAs) or operating"},{"line_number":158,"context_line":"  contracts. A key parameter is ``min_instance_age`` (defaulting to"},{"line_number":159,"context_line":"  3600 seconds). This ensures an instance cannot be preempted"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fc831758_cbe05273","line":156,"updated":"2026-07-01 18:26:05.000000000","message":"The min_instance_age conditional invariant (default 3600s) is well-motivated, but the spec does not describe what happens when no candidates satisfy the age filter while thresholds are violated (preemption is impossible). This is a key operational edge case.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Documenting the no-eligible-candidate behavior (e.g. audit fails/logs a warning vs. force-preempt) prevents ambiguity during implementation and sets operator expectations.\n\n**Recommendation**:\nAdd a sentence to the Conditional Invariants paragraph stating the strategy\u0027s behavior when the candidate pool is empty after filtering (e.g. the action plan is empty and the audit records that thresholds could not be met).","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":159,"context_line":"  3600 seconds). This ensures an instance cannot be preempted"},{"line_number":160,"context_line":"  immediately after creation, protecting the user\u0027s workload for"},{"line_number":161,"context_line":"  a guaranteed minimum window. This window can be adjusted by"},{"line_number":162,"context_line":"  operators to reflect their specific cloud context (e.g., short"},{"line_number":163,"context_line":"  30-second preemption notice policies versus standard 1-hour to"},{"line_number":164,"context_line":"  1-day windows)."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Because this filtering logic is encapsulated in a standalone, reusable"},{"line_number":167,"context_line":"function, the strategy can iteratively re-apply the exact same"}],"source_content_type":"text/x-rst","patch_set":10,"id":"835a790f_62ca33a3","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":17},"updated":"2026-07-01 19:12:48.000000000","message":"I didn\u0027t get the preemption notice here in this context, I think that this is just about minimal age for preemptible intances.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"652e431c61c103a4ce0a159a614204bb46a9a6c9","unresolved":false,"context_lines":[{"line_number":159,"context_line":"  3600 seconds). This ensures an instance cannot be preempted"},{"line_number":160,"context_line":"  immediately after creation, protecting the user\u0027s workload for"},{"line_number":161,"context_line":"  a guaranteed minimum window. This window can be adjusted by"},{"line_number":162,"context_line":"  operators to reflect their specific cloud context (e.g., short"},{"line_number":163,"context_line":"  30-second preemption notice policies versus standard 1-hour to"},{"line_number":164,"context_line":"  1-day windows)."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Because this filtering logic is encapsulated in a standalone, reusable"},{"line_number":167,"context_line":"function, the strategy can iteratively re-apply the exact same"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b7a83cca_6fe57f41","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":17},"in_reply_to":"08993b22_a54464a2","updated":"2026-07-02 12:26:00.000000000","message":"Ack, thanks, that was my point, since we don\u0027t plan to support any kind of warning message for now, or even implement a delay/schedule the action plan execution.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":true,"context_lines":[{"line_number":159,"context_line":"  3600 seconds). This ensures an instance cannot be preempted"},{"line_number":160,"context_line":"  immediately after creation, protecting the user\u0027s workload for"},{"line_number":161,"context_line":"  a guaranteed minimum window. This window can be adjusted by"},{"line_number":162,"context_line":"  operators to reflect their specific cloud context (e.g., short"},{"line_number":163,"context_line":"  30-second preemption notice policies versus standard 1-hour to"},{"line_number":164,"context_line":"  1-day windows)."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Because this filtering logic is encapsulated in a standalone, reusable"},{"line_number":167,"context_line":"function, the strategy can iteratively re-apply the exact same"}],"source_content_type":"text/x-rst","patch_set":10,"id":"08993b22_a54464a2","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":17},"in_reply_to":"2c233145_057bfa62","updated":"2026-07-01 22:36:01.000000000","message":"Removed this part.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"356775e748be7f813385ab70634a976d41d10cee","unresolved":true,"context_lines":[{"line_number":159,"context_line":"  3600 seconds). This ensures an instance cannot be preempted"},{"line_number":160,"context_line":"  immediately after creation, protecting the user\u0027s workload for"},{"line_number":161,"context_line":"  a guaranteed minimum window. This window can be adjusted by"},{"line_number":162,"context_line":"  operators to reflect their specific cloud context (e.g., short"},{"line_number":163,"context_line":"  30-second preemption notice policies versus standard 1-hour to"},{"line_number":164,"context_line":"  1-day windows)."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Because this filtering logic is encapsulated in a standalone, reusable"},{"line_number":167,"context_line":"function, the strategy can iteratively re-apply the exact same"}],"source_content_type":"text/x-rst","patch_set":10,"id":"2c233145_057bfa62","line":164,"range":{"start_line":162,"start_character":52,"end_line":164,"end_character":17},"in_reply_to":"835a790f_62ca33a3","updated":"2026-07-01 20:08:18.000000000","message":"it is. in some system like ibm cloud the send you an email 30s before they delete the instance sinc ethat is htere min age which is kind of not helpful\n\naws give you an hours notice i belive.\n\ni woudl avodi using that term here and just use min_age to keep it clear as we dont want to impy we will send some kind of user message before the premetion happens","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Generalized Priority Sorting"},{"line_number":172,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Rather than hardcoding rigid tie-breakers—such as forcing an ``oldest`` policy"},{"line_number":175,"context_line":"to automatically break ties using resource utilization—the strategy implements"},{"line_number":176,"context_line":"a generalized algorithm where sorting criteria are completely decoupled."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a4f337e3_f800975f","line":174,"updated":"2026-07-01 18:26:05.000000000","message":"The spec contains non-ASCII characters: em-dashes (lines 22, 23, 174, 175) and curly/typographic apostrophes (lines 49, 52, 57). Project guidelines require specs to be ASCII and the template instructs wrapping at 79 columns. The em-dashes also cause lines 174-175 to exceed the 79-column limit.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Non-ASCII punctuation can render inconsistently across plain-text Gerrit review and may break the 79-column wrap rule (lines 174-175 measure 80 chars in byte terms). The project explicitly requires ASCII for specs.\n\n**Suggestion**:\nReplace em-dashes with \u0027--\u0027 and curly apostrophes with straight apostrophes. This also brings lines 174-175 back within the 79-column limit.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ea97150d44d5cfe7ce0e259647cebcb4d22467fe","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Generalized Priority Sorting"},{"line_number":172,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Rather than hardcoding rigid tie-breakers—such as forcing an ``oldest`` policy"},{"line_number":175,"context_line":"to automatically break ties using resource utilization—the strategy implements"},{"line_number":176,"context_line":"a generalized algorithm where sorting criteria are completely decoupled."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a105e7cf_20964b7e","line":174,"in_reply_to":"a4f337e3_f800975f","updated":"2026-07-01 19:35:06.000000000","message":"the em-dash repcacement is valid but not th ebacktick repalcement \ni need to add back ticks to the allowed set.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":171,"context_line":"Generalized Priority Sorting"},{"line_number":172,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Rather than hardcoding rigid tie-breakers—such as forcing an ``oldest`` policy"},{"line_number":175,"context_line":"to automatically break ties using resource utilization—the strategy implements"},{"line_number":176,"context_line":"a generalized algorithm where sorting criteria are completely decoupled."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"The order in which valid candidates are evaluated for termination is controlled"},{"line_number":179,"context_line":"by a ``preemption_preference`` parameter, which accepts a prioritized list of"}],"source_content_type":"text/x-rst","patch_set":10,"id":"005ebf30_47e6470b","line":176,"range":{"start_line":174,"start_character":0,"end_line":176,"end_character":72},"updated":"2026-07-01 19:12:48.000000000","message":"```suggestion\nRather than hardcoding rigid tie-breakers, such as forcing an ``oldest`` policy\nto automatically break ties using resource utilization, the strategy implements\na generalized algorithm where sorting criteria are completely decoupled.\n```\nnit: i think that comma is better than hifen here","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Generalized Priority Sorting"},{"line_number":172,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Rather than hardcoding rigid tie-breakers—such as forcing an ``oldest`` policy"},{"line_number":175,"context_line":"to automatically break ties using resource utilization—the strategy implements"},{"line_number":176,"context_line":"a generalized algorithm where sorting criteria are completely decoupled."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"The order in which valid candidates are evaluated for termination is controlled"},{"line_number":179,"context_line":"by a ``preemption_preference`` parameter, which accepts a prioritized list of"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e0b7a4e5_9745b903","line":176,"range":{"start_line":174,"start_character":0,"end_line":176,"end_character":72},"in_reply_to":"005ebf30_47e6470b","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":188,"context_line":"* **age**: Evaluated by creation timestamp. Combined with ``dec`` (descending),"},{"line_number":189,"context_line":"  oldest instances are reaped first."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* **allocation**: Evaluated by the flavor\u0027s footprint size (vCPU, RAM,"},{"line_number":192,"context_line":"  disk). Combined with ``dec``, this allows operators to prioritize"},{"line_number":193,"context_line":"  maximizing resellable capacity and hitting free-allocation"},{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"39247602_27763200","line":195,"range":{"start_line":191,"start_character":0,"end_line":195,"end_character":41},"updated":"2026-07-01 19:12:48.000000000","message":"I believe that for this you will going to order by vCPU -\u003e RAM -\u003e Disk order, correct?","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"356775e748be7f813385ab70634a976d41d10cee","unresolved":true,"context_lines":[{"line_number":188,"context_line":"* **age**: Evaluated by creation timestamp. Combined with ``dec`` (descending),"},{"line_number":189,"context_line":"  oldest instances are reaped first."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* **allocation**: Evaluated by the flavor\u0027s footprint size (vCPU, RAM,"},{"line_number":192,"context_line":"  disk). Combined with ``dec``, this allows operators to prioritize"},{"line_number":193,"context_line":"  maximizing resellable capacity and hitting free-allocation"},{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c6d227e5_98a0af64","line":195,"range":{"start_line":191,"start_character":0,"end_line":195,"end_character":41},"in_reply_to":"39247602_27763200","updated":"2026-07-01 20:08:18.000000000","message":"so i woudl perfer we requrie you to spell this out\n\npreemption_preference \u003d [(\"resocue:vcpu\",\"dec)\", (\"resource:memory_mb\",\"dec\"), ...]\n\nso for resocue usage we woudl supprot all trackabel placement resrouces via the resouce:\u003cclass\u003e syntax\n\n\nif we had a defult order i woudl ue\n\nRAM -\u003e VCPU -\u003e Disk\n\n\nram is typicly the limiting factor folloaded by cpu followed by disk in a cloud\n\nto the point hwere i genrealy recomied enabling only 2 weigher by default\nthe ram weigher and the metrics weigher looking only at cpu load","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":188,"context_line":"* **age**: Evaluated by creation timestamp. Combined with ``dec`` (descending),"},{"line_number":189,"context_line":"  oldest instances are reaped first."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* **allocation**: Evaluated by the flavor\u0027s footprint size (vCPU, RAM,"},{"line_number":192,"context_line":"  disk). Combined with ``dec``, this allows operators to prioritize"},{"line_number":193,"context_line":"  maximizing resellable capacity and hitting free-allocation"},{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a2756a3_7bca29ea","line":195,"range":{"start_line":191,"start_character":0,"end_line":195,"end_character":41},"in_reply_to":"583facb6_a8e1c9cf","updated":"2026-07-09 19:46:12.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":true,"context_lines":[{"line_number":188,"context_line":"* **age**: Evaluated by creation timestamp. Combined with ``dec`` (descending),"},{"line_number":189,"context_line":"  oldest instances are reaped first."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* **allocation**: Evaluated by the flavor\u0027s footprint size (vCPU, RAM,"},{"line_number":192,"context_line":"  disk). Combined with ``dec``, this allows operators to prioritize"},{"line_number":193,"context_line":"  maximizing resellable capacity and hitting free-allocation"},{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"583facb6_a8e1c9cf","line":195,"range":{"start_line":191,"start_character":0,"end_line":195,"end_character":41},"in_reply_to":"c6d227e5_98a0af64","updated":"2026-07-01 22:36:01.000000000","message":"Changed the section to reflect the expected input instead of being general about \"allocation\".\n\nYeah, indeed RAM is the bottleneck in most of the environments since vCPU is overcommitted most of the times, but I think we don\u0027t need a default here.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":199,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"},{"line_number":202,"context_line":"\u0027dec\u0027)]``, which preempts instances from oldest to newest. This"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3206db61_51a0842a","line":199,"range":{"start_line":197,"start_character":0,"end_line":199,"end_character":62},"updated":"2026-07-01 19:12:48.000000000","message":"I don\u0027t get how the weight is going to be provided here, in the following lines you just have a example as: [(\u0027weighted-utilization\u0027, \u0027acc\u0027),..] - is this an additional parameter?\nOr do you want to have: [(\u0027instance_cpu_usage\u0027, \u0027acc\u0027), (\u0027instance_mem_usage\u0027, \u0027acc\u0027)]?","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7f05cc62c3ff1f5fabf8f86cbf25099cacaf3b2e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":199,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"},{"line_number":202,"context_line":"\u0027dec\u0027)]``, which preempts instances from oldest to newest. This"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d59cfe50_e1236669","line":199,"range":{"start_line":197,"start_character":0,"end_line":199,"end_character":62},"in_reply_to":"2d7041f5_80b22a98","updated":"2026-07-07 14:51:01.000000000","message":"weighted mode was removed from the spec for this first implementation.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"356775e748be7f813385ab70634a976d41d10cee","unresolved":true,"context_lines":[{"line_number":194,"context_line":"  thresholds with the fewest possible disruptions, regardless of the"},{"line_number":195,"context_line":"  instance\u0027s active internal utilization."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":198,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":199,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"The default value of ``preemption_preference`` is ``[(\u0027age\u0027,"},{"line_number":202,"context_line":"\u0027dec\u0027)]``, which preempts instances from oldest to newest. This"}],"source_content_type":"text/x-rst","patch_set":10,"id":"2d7041f5_80b22a98","line":199,"range":{"start_line":197,"start_character":0,"end_line":199,"end_character":62},"in_reply_to":"3206db61_51a0842a","updated":"2026-07-01 20:08:18.000000000","message":"i woudl prefer not to supprot this in the inital version\nif we do i woudl add an optional multipleier\n\npreemption_preference \u003d [(\"resocue:vcpu\",\"dec\", 0.5), (\"resource:memory_mb\",\"dec\", 2.0), ...]\n\ni dont think we shoudl give any one resouce special treatment.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":226,"context_line":"criterias:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"* **preempted_instances_count**: The total number of preempted"},{"line_number":229,"context_line":"  instances. This is important because it is part of the soluction"},{"line_number":230,"context_line":"  release the necessary resources with the fewest instances as"},{"line_number":231,"context_line":"  possible."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3dd9d5b7_d64b7269","line":229,"updated":"2026-07-01 18:26:05.000000000","message":"Several spelling and grammar errors reduce professional quality: \u0027capasity\u0027 (capacity), \u0027investiment\u0027 (investment), \u0027there for\u0027 (therefore), \u0027soluction\u0027 (solution), \u0027criterias\u0027 (criteria), and \u0027underutilization resources\u0027 (missing preposition).\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Spelling errors in an approved spec persist into the implemented/archived record and undermine reviewer confidence in the technical detail.\n\n**Suggestion**:\nCorrect: capasity-\u003ecapacity (L75), investiment-\u003einvestment (L76), \u0027there for\u0027-\u003e\u0027therefore\u0027 (L73), \u0027soluction\u0027-\u003e\u0027solution\u0027 (L229), \u0027criterias\u0027-\u003e\u0027criteria\u0027 (L226), and fix \u0027underutilization resources\u0027-\u003e\u0027underutilization of resources\u0027 (L36).","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":233,"context_line":"* **resource_allocation_before**: The allocated resources (vCPU, RAM,"},{"line_number":234,"context_line":"  disk) across the audit scope prior to applying the solution, broken"},{"line_number":235,"context_line":"  down per resource type."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"* **resource_allocation_after**: The allocated resources (vCPU, RAM,"},{"line_number":238,"context_line":"  disk) across the audit scope after applying the solution, broken"},{"line_number":239,"context_line":"  down per resource type. Comparing this against"},{"line_number":240,"context_line":"  ``resource_allocation_before`` shows how much allocation was"},{"line_number":241,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":242,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":243,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* **vcpu_freed**: The total number of vCPUs freed by the solution,"},{"line_number":246,"context_line":"  computed as the sum of the vCPU count of each preempted instance\u0027s"},{"line_number":247,"context_line":"  flavor."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **mem_mb_freed**: The total amount of RAM freed (in MB) by the"},{"line_number":250,"context_line":"  solution, computed as the sum of the RAM size of each preempted"},{"line_number":251,"context_line":"  instance\u0027s flavor."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"* **disk_gb_freed**: The total amount of disk freed (in GB) by the"},{"line_number":254,"context_line":"  solution, computed as the sum of the root disk size of each"},{"line_number":255,"context_line":"  preempted instance\u0027s flavor."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Actions"},{"line_number":258,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b3432ec6_8b6c4ee6","line":255,"range":{"start_line":236,"start_character":0,"end_line":255,"end_character":30},"updated":"2026-07-01 19:12:48.000000000","message":"These information looks similar to me, I think that we can simplify by picking just one or another","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":233,"context_line":"* **resource_allocation_before**: The allocated resources (vCPU, RAM,"},{"line_number":234,"context_line":"  disk) across the audit scope prior to applying the solution, broken"},{"line_number":235,"context_line":"  down per resource type."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"* **resource_allocation_after**: The allocated resources (vCPU, RAM,"},{"line_number":238,"context_line":"  disk) across the audit scope after applying the solution, broken"},{"line_number":239,"context_line":"  down per resource type. Comparing this against"},{"line_number":240,"context_line":"  ``resource_allocation_before`` shows how much allocation was"},{"line_number":241,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":242,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":243,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* **vcpu_freed**: The total number of vCPUs freed by the solution,"},{"line_number":246,"context_line":"  computed as the sum of the vCPU count of each preempted instance\u0027s"},{"line_number":247,"context_line":"  flavor."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **mem_mb_freed**: The total amount of RAM freed (in MB) by the"},{"line_number":250,"context_line":"  solution, computed as the sum of the RAM size of each preempted"},{"line_number":251,"context_line":"  instance\u0027s flavor."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"* **disk_gb_freed**: The total amount of disk freed (in GB) by the"},{"line_number":254,"context_line":"  solution, computed as the sum of the root disk size of each"},{"line_number":255,"context_line":"  preempted instance\u0027s flavor."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Actions"},{"line_number":258,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ee209554_6870325d","line":255,"range":{"start_line":236,"start_character":0,"end_line":255,"end_character":30},"in_reply_to":"b3432ec6_8b6c4ee6","updated":"2026-07-02 11:07:36.000000000","message":"+1, personally I think it\u0027s more useful to have the `\u003cresource\u003e_freed` indicators that the allocations before and after","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c143f4deda2b2607e933ccce769857ba0528a9a0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"* **resource_allocation_before**: The allocated resources (vCPU, RAM,"},{"line_number":234,"context_line":"  disk) across the audit scope prior to applying the solution, broken"},{"line_number":235,"context_line":"  down per resource type."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"* **resource_allocation_after**: The allocated resources (vCPU, RAM,"},{"line_number":238,"context_line":"  disk) across the audit scope after applying the solution, broken"},{"line_number":239,"context_line":"  down per resource type. Comparing this against"},{"line_number":240,"context_line":"  ``resource_allocation_before`` shows how much allocation was"},{"line_number":241,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":242,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":243,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* **vcpu_freed**: The total number of vCPUs freed by the solution,"},{"line_number":246,"context_line":"  computed as the sum of the vCPU count of each preempted instance\u0027s"},{"line_number":247,"context_line":"  flavor."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **mem_mb_freed**: The total amount of RAM freed (in MB) by the"},{"line_number":250,"context_line":"  solution, computed as the sum of the RAM size of each preempted"},{"line_number":251,"context_line":"  instance\u0027s flavor."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"* **disk_gb_freed**: The total amount of disk freed (in GB) by the"},{"line_number":254,"context_line":"  solution, computed as the sum of the root disk size of each"},{"line_number":255,"context_line":"  preempted instance\u0027s flavor."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Actions"},{"line_number":258,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ce1bc686_a8a77d1f","line":255,"range":{"start_line":236,"start_character":0,"end_line":255,"end_character":30},"in_reply_to":"d75de88d_f2f901f6","updated":"2026-07-06 10:26:33.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":233,"context_line":"* **resource_allocation_before**: The allocated resources (vCPU, RAM,"},{"line_number":234,"context_line":"  disk) across the audit scope prior to applying the solution, broken"},{"line_number":235,"context_line":"  down per resource type."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"* **resource_allocation_after**: The allocated resources (vCPU, RAM,"},{"line_number":238,"context_line":"  disk) across the audit scope after applying the solution, broken"},{"line_number":239,"context_line":"  down per resource type. Comparing this against"},{"line_number":240,"context_line":"  ``resource_allocation_before`` shows how much allocation was"},{"line_number":241,"context_line":"  actually freed and whether the configured thresholds (e.g."},{"line_number":242,"context_line":"  ``cpu_free_percentage``, ``ram_free_percentage``,"},{"line_number":243,"context_line":"  ``disk_free_percentage``) were met."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* **vcpu_freed**: The total number of vCPUs freed by the solution,"},{"line_number":246,"context_line":"  computed as the sum of the vCPU count of each preempted instance\u0027s"},{"line_number":247,"context_line":"  flavor."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **mem_mb_freed**: The total amount of RAM freed (in MB) by the"},{"line_number":250,"context_line":"  solution, computed as the sum of the RAM size of each preempted"},{"line_number":251,"context_line":"  instance\u0027s flavor."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"* **disk_gb_freed**: The total amount of disk freed (in GB) by the"},{"line_number":254,"context_line":"  solution, computed as the sum of the root disk size of each"},{"line_number":255,"context_line":"  preempted instance\u0027s flavor."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Actions"},{"line_number":258,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d75de88d_f2f901f6","line":255,"range":{"start_line":236,"start_character":0,"end_line":255,"end_character":30},"in_reply_to":"ee209554_6870325d","updated":"2026-07-02 17:01:47.000000000","message":"Dropped the `resource_allocation_after|before` indicators.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":266,"context_line":"API."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"The operator can configure the default preemption policy that will be"},{"line_number":269,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":270,"context_line":"default value of ``delete``. Besides, the cloud user should be able to"},{"line_number":271,"context_line":"choose which policy they would like to use. This can be done via a"},{"line_number":272,"context_line":"Flavor property."}],"source_content_type":"text/x-rst","patch_set":10,"id":"aa1326ae_dede5bab","line":269,"updated":"2026-07-01 18:26:05.000000000","message":"The default preemption_mode is \u0027delete\u0027 (line 270), which permanently destroys instances and their ephemeral storage. Defaulting to the more destructive option is a risky choice for a freshly deployed feature.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A safer default (\u0027shelve\u0027) preserves user data while operators learn the feature, and operators who explicitly want deletion can opt in.\n\n**Recommendation**:\nConsider justifying why \u0027delete\u0027 is the default rather than \u0027shelve\u0027, or default to \u0027shelve\u0027 with documentation that \u0027delete\u0027 is available for operators who want full reclamation.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"None"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Security impact"},{"line_number":324,"context_line":"---------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0b58b594_c712eeac","line":323,"updated":"2026-07-01 18:26:05.000000000","message":"The spec dismisses Security impact as \u0027None\u0027, but the feature deletes or shelves running tenant instances based on flavor properties and operator thresholds. This touches availability and data retention for end users, which the template\u0027s Security section explicitly asks reviewers to consider.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Deleting instances (the default preemption_mode) destroys ephemeral disks and running state. Reviewers cannot assess whether the design protects against accidental or abusive preemption of workloads that should not be tagged preemptible.\n\n**Suggestion**:\nBriefly note the trust boundary: preemption only affects instances whose flavor explicitly sets lifecycle:preemptable\u003dtrue (user opt-in), and discuss whether any validation is needed to prevent mis-tagging or privilege abuse around flavor extra specs.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"None"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other end user impact"},{"line_number":334,"context_line":"---------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"8e22f01f_2b22acca","line":333,"updated":"2026-07-01 18:26:05.000000000","message":"The \u0027Other end user impact\u0027 section is completely empty (no body text, not even \u0027None\u0027). The spec template and project guidelines explicitly require: \u0027Please do not delete any sections. If you have nothing to say for a whole section, just write: None.\u0027 An empty section breaks RST rendering because the heading runs directly into the next heading.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: RST rendering produces two adjacent headings with no content between them, and the section violates the mandatory template requirement that all sections contain at least \u0027None\u0027.\n\n**Priority**: Before merge\n**Why This Matters**: The watcher-specs review process treats template compliance as a gating requirement. Reviewers and the docs build expect every section to be present with content.\n\n**Recommendation**:\nAdd \u0027None\u0027 (or a brief note, e.g. that there is no CLI/client impact beyond standard AuditTemplate usage) under the \u0027Other end user impact\u0027 heading at line 334, mirroring the other \u0027None\u0027 sections in the spec.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f1ac7561f266b853a5cde0f847d914ab055addb6","unresolved":true,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"None"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other end user impact"},{"line_number":334,"context_line":"---------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c42c21cf_71a0bef8","line":333,"in_reply_to":"8e22f01f_2b22acca","updated":"2026-07-01 19:12:48.000000000","message":"yes, we should at least add a None here.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"c23698d5e4e7fd607a41bd9504396cf7e0ff11f7","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"None"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other end user impact"},{"line_number":334,"context_line":"---------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d1643f61_228056c7","line":333,"in_reply_to":"bdba9b9a_56210b5a","updated":"2026-07-01 22:36:01.000000000","message":"Done","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1f25cb26c61da67253a7bfaf1f829e76b3730a7d","unresolved":true,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"None"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other end user impact"},{"line_number":334,"context_line":"---------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff80bd7a_33cb417e","line":333,"in_reply_to":"c42c21cf_71a0bef8","updated":"2026-07-01 19:13:30.000000000","message":"The output looks weird without the None:\nhttps://b4e2813526c29fb0c57c-7bb80372f0afdd66074282be31095685.ssl.cf5.rackcdn.com/openstack/7043dd0a574043189ad3432f9055f882/docs/specs/2026.2/approved/preemptible-instances.html#other-end-user-impact","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"356775e748be7f813385ab70634a976d41d10cee","unresolved":true,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"None"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Other end user impact"},{"line_number":334,"context_line":"---------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"bdba9b9a_56210b5a","line":333,"in_reply_to":"ff80bd7a_33cb417e","updated":"2026-07-01 20:08:18.000000000","message":"ya we should add None\n\nthat partly why we leave it","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0233a5980590fff2d5bf9381e2386671d08d7577","unresolved":false,"context_lines":[{"line_number":397,"context_line":"References"},{"line_number":398,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":".. _[1]:"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"[1] AWS Spot Instances Documentation -"},{"line_number":403,"context_line":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html"}],"source_content_type":"text/x-rst","patch_set":10,"id":"272f1c7f_c005505f","line":400,"updated":"2026-07-01 18:26:05.000000000","message":"The References section uses a malformed RST hyperlink-target pattern. \u0027.. _[1]:\u0027 defines a link target whose value becomes the following block (\u0027[1] AWS Spot Instances Documentation - ...\u0027), which is not a URL. The body cites these as named references (line 39: `[1]`_ `[2]`_), so the links will be broken or point to literal text rather than the intended URLs.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Built documentation will emit RST warnings and produce broken/non-functional cross-reference links for citations [1] and [2]; reference [3] is listed but has no target definition at all.\n\n**Priority**: Before merge\n**Why This Matters**: A specification must render cleanly with sphinx-build (tox -e docs). Broken references are visible to reviewers and end up in published docs.\n\n**Recommendation**:\nUse proper RST footnotes: \u0027.. [1] AWS Spot Instances Documentation - https://...\u0027 (no separate \u0027.. _[1]:\u0027 target needed; the footnote label itself is the reference target for `[1]_`). Apply the same to [2] and add a \u0027.. [3]\u0027 target. Alternatively use plain bullet links.","commit_id":"89acd555061368dfc752a81ea2baa8f5c251803c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I can offer use my spare capacity at a steep"},{"line_number":50,"context_line":"  discount rate."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I can save money by running batch or non critical"}],"source_content_type":"text/x-rst","patch_set":11,"id":"b43e0ad5_8c41348f","line":49,"updated":"2026-07-02 11:07:36.000000000","message":"```suggestion\n* As a public cloud, I can offer users my spare capacity at a steep\n```","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Use Cases"},{"line_number":47,"context_line":"----------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* As a public cloud, I can offer use my spare capacity at a steep"},{"line_number":50,"context_line":"  discount rate."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* As a paying user, I can save money by running batch or non critical"}],"source_content_type":"text/x-rst","patch_set":11,"id":"58c8b34d_a779e6dd","line":49,"in_reply_to":"b43e0ad5_8c41348f","updated":"2026-07-02 17:01:47.000000000","message":"Done","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  workloads on a VM tier with a minimum time before termination."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* As a university or private HPC cloud I can allow teams to pool their"},{"line_number":56,"context_line":"  hardware to deploy open source, fault-tolerat, and highly scalable"},{"line_number":57,"context_line":"  job scheduling systems like Slurm while still having dedicated"},{"line_number":58,"context_line":"  capacity."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3519fadc_2fff8bf0","line":56,"updated":"2026-07-01 22:45:52.000000000","message":"Multiple spelling errors throughout the spec: \u0027there for\u0027 (line 70, should be \u0027therefore\u0027), \u0027investiment\u0027 (line 73, should be \u0027investment\u0027), \u0027soluction\u0027 (line 232, should be \u0027solution\u0027), \u0027criterias\u0027 (line 229, should be \u0027criteria\u0027), \u0027fault-tolerat\u0027 (line 56, should be \u0027fault-tolerant\u0027).\n\n**Severity**: SUGGESTION | **Confidence**: 1.0\n\n**Benefit**: Correct spelling improves professionalism and readability of a specification that will be referenced long-term by implementers and operators.\n\n**Recommendation**:\nFix: line 56 \u0027fault-tolerat\u0027 to \u0027fault-tolerant\u0027, line 70 \u0027there for\u0027 to \u0027therefore\u0027, line 73 \u0027investiment\u0027 to \u0027investment\u0027, line 229 \u0027criterias\u0027 to \u0027criteria\u0027, line 232 \u0027soluction\u0027 to \u0027solution\u0027.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":53,"context_line":"  workloads on a VM tier with a minimum time before termination."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* As a university or private HPC cloud I can allow teams to pool their"},{"line_number":56,"context_line":"  hardware to deploy open source, fault-tolerat, and highly scalable"},{"line_number":57,"context_line":"  job scheduling systems like Slurm while still having dedicated"},{"line_number":58,"context_line":"  capacity."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"f2263ca1_096d3dd0","line":56,"in_reply_to":"3519fadc_2fff8bf0","updated":"2026-07-02 11:07:36.000000000","message":"I agree it would be good to fix these","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  workloads on a VM tier with a minimum time before termination."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* As a university or private HPC cloud I can allow teams to pool their"},{"line_number":56,"context_line":"  hardware to deploy open source, fault-tolerat, and highly scalable"},{"line_number":57,"context_line":"  job scheduling systems like Slurm while still having dedicated"},{"line_number":58,"context_line":"  capacity."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"57203676_f1fd4580","line":56,"in_reply_to":"f2263ca1_096d3dd0","updated":"2026-07-02 17:01:47.000000000","message":"Done","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":67,"context_line":"feature, we will need a new goal: **Workload Optimization**."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"The objective of this goal is to free resources in use by low"},{"line_number":70,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":71,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":72,"context_line":"priority workloads to use spare capacity while also enabling higher"},{"line_number":73,"context_line":"return on investiment when capacity is needed."}],"source_content_type":"text/x-rst","patch_set":11,"id":"8439f5d2_1304289e","line":70,"updated":"2026-07-02 11:07:36.000000000","message":"I think this is a typo as well? \n```suggestion\npriority workloads and therefore optimize capacity for higher priority\n```","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":false,"context_lines":[{"line_number":67,"context_line":"feature, we will need a new goal: **Workload Optimization**."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"The objective of this goal is to free resources in use by low"},{"line_number":70,"context_line":"priority workloads and there for optimize capacity for higher priority"},{"line_number":71,"context_line":"workloads. This optimizes infrastructure utilization by allowing lower"},{"line_number":72,"context_line":"priority workloads to use spare capacity while also enabling higher"},{"line_number":73,"context_line":"return on investiment when capacity is needed."}],"source_content_type":"text/x-rst","patch_set":11,"id":"ab7a3304_ef833123","line":70,"in_reply_to":"8439f5d2_1304289e","updated":"2026-07-02 17:01:47.000000000","message":"Done. Thanks for catching this.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"f152b8b4_4c14cbf8","line":130,"updated":"2026-07-01 22:45:52.000000000","message":"Sort direction parameter value inconsistency: line 130 uses \u0027asc\u0027 for ascending while lines 201, 217, 220 use \u0027acc\u0027 for the same concept. One of these is wrong and will cause implementation confusion or silent misconfiguration.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Implementers and operators will use inconsistent direction tokens. If the code accepts only one form, the other silently fails to sort or raises an unhandled error during audit execution.\n\n**Priority**: Before merge\n**Why This Matters**: A spec with contradictory parameter values for the same concept guarantees implementation ambiguity. The parameter name is used in configuration examples that operators will copy directly.\n\n**Recommendation**:\nStandardize on a single token throughout the spec. \u0027asc\u0027/\u0027desc\u0027 is the most conventional and least ambiguous choice. Update line 130 (currently \u0027asc\u0027), lines 201/217/220 (currently \u0027acc\u0027), and line 185 (\u0027dec\u0027 is fine if paired with \u0027asc\u0027) so every occurrence uses the same pair consistently.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"d8f2130aa6be031778bbaf9fda9bc97073a67ea8","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"e5fc52db_0b86b6e8","line":130,"in_reply_to":"1bdd6e9c_cccc67bd","updated":"2026-07-07 21:37:46.000000000","message":"I put just a small sentence to make clear what `asc` and `dec` state for, and changed one of the examples to include the `asc` direction.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"f77fc017_f90df4e8","line":130,"in_reply_to":"5f4d9c26_57f8c718","updated":"2026-07-02 17:01:47.000000000","message":"I believe `asc` is more descriptive for `ascending` and `dec` for `decrescent` so keeping as it is, just making it consistent across mentions.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8caf826200a793622b47b3887adae7cda42c7a6","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4d9c26_57f8c718","line":130,"in_reply_to":"a1645fb7_145d9cbd","updated":"2026-07-02 11:31:55.000000000","message":"we coudl also use `+|-` or some other vlaues for accending and decending\n\n`acd` and `acc` are teh common ones i have seen mainly `acc` \nbut this si something that we are free to choose\n\nperhaps `\u003e` and `\u003c` woudl be better or `up` and `down`\n\nthe other option is to do what python dhoes and have reverse\u003dTure|False\n\nso change ti form direct to reverse and make it a boolean\n\nif we find thses concusing it better to fix ti now","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"a050671887ed36df7ff2a317f1ccb8aacdd8cacd","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"db70750c_2c74fbb5","line":130,"in_reply_to":"e5fc52db_0b86b6e8","updated":"2026-07-08 09:04:03.000000000","message":"Done","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"a1645fb7_145d9cbd","line":130,"in_reply_to":"f152b8b4_4c14cbf8","updated":"2026-07-02 11:07:36.000000000","message":"+1, the `acc` in line 220 looks like a typo, but it\u0027s important to be careful on examples so it\u0027s clear for user how to use the feature","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c143f4deda2b2607e933ccce769857ba0528a9a0","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    Note that this applies only to *when* the strategy decides to preempt."},{"line_number":128,"context_line":"    *Which* instances are selected depends on the ``preemption_preference``"},{"line_number":129,"context_line":"    configuration (see `Generalized Priority Sorting`_): operators can target"},{"line_number":130,"context_line":"    idle instances first (``weighted-utilization asc``), heavily used instances"},{"line_number":131,"context_line":"    first (``weighted-utilization dec``), or ignore utilization entirely in"},{"line_number":132,"context_line":"    favour of age or allocation footprint."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1bdd6e9c_cccc67bd","line":130,"in_reply_to":"f77fc017_f90df4e8","updated":"2026-07-06 10:26:33.000000000","message":"that seems ok to me, but actually there is no example of it in the spec, it might be worth mentioning that is the opposite value of `dec` while describing the `preemption_preference`","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"236225bf_1180280a","line":145,"updated":"2026-07-01 22:45:52.000000000","message":"Line 145 states the filtering function \u0027accepts either list of instances\u0027 which is ambiguous. It is unclear what \u0027either\u0027 refers to since no alternative input types have been introduced at that point in the text.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Clarifying the filtering function\u0027s input contract helps implementers understand the API design and helps readers follow the candidate pipeline.\n\n**Recommendation**:\nRewrite to specify exactly what the function accepts, e.g., \u0027accepts a list of instances from the compute node data model\u0027 or clarify the two input types if \u0027either\u0027 refers to a specific choice.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"e3f9c87a_1680cbc9","line":145,"in_reply_to":"0463f899_5f5f61fa","updated":"2026-07-02 17:01:47.000000000","message":"I removed the mention to cluster data model to something more general and forgot to remove the \"either\" word. Removing it.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"765ca468cb5f050e5d8a0e40e4e79b5c376e4790","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"e03a5e49_feeda5a7","line":145,"in_reply_to":"236225bf_1180280a","updated":"2026-07-02 11:07:36.000000000","message":"I agree this is valid issue, I\u0027m not sure I understand what the `either` means here","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8caf826200a793622b47b3887adae7cda42c7a6","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"f95bf1d2_2f1a1406","line":145,"in_reply_to":"e03a5e49_feeda5a7","updated":"2026-07-02 11:31:55.000000000","message":"this used to say either a list of instance or a cluster data model.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c143f4deda2b2607e933ccce769857ba0528a9a0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"a40ed34f_0c61922d","line":145,"in_reply_to":"e3f9c87a_1680cbc9","updated":"2026-07-06 10:26:33.000000000","message":"Done","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"652e431c61c103a4ce0a159a614204bb46a9a6c9","unresolved":true,"context_lines":[{"line_number":142,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Before any sorting occurs, the strategy utilizes a reusable filtering"},{"line_number":145,"context_line":"function that accepts either list of instances. This function"},{"line_number":146,"context_line":"evaluates every instance against a set of invariants to build the"},{"line_number":147,"context_line":"baseline candidate pool for the affected compute node(s)."},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"0463f899_5f5f61fa","line":145,"in_reply_to":"f95bf1d2_2f1a1406","updated":"2026-07-02 12:26:00.000000000","message":"We don\u0027t really need to provide this level of implementation detail, we just need to explain the filtering part functionallity. We may figure it out the best way to implement this during development phase and code review.\nBut yeah, this now looks weird.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* **Mandatory Invariants**: Instances are immediately excluded unless"},{"line_number":150,"context_line":"  they are explicitly annotated as preemptible via their Flavor"},{"line_number":151,"context_line":"  properties (e.g., ``lifecycle:preemptable\u003dtrue``)."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"* **Conditional Invariants**: The function filters instances based on"},{"line_number":154,"context_line":"  cloud-specific service level agreements (SLAs) or operating"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1e8068dc_5f6b1374","line":151,"updated":"2026-07-01 22:45:52.000000000","message":"Lifecycle property naming is inconsistent: the spec uses \u0027lifecycle:preemptable\u0027 on lines 151 and 347, but the preemption policy property on line 275 is \u0027lifecycle:preempt_policy\u0027. The relationship between these properties is not documented.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators may confuse which flavor property controls candidate eligibility (preemptable) vs. the preemption action (preempt_policy). Implementation may use one spelling when the other was intended.\n\n**Suggestion**:\nAdd a table or explicit paragraph listing all lifecycle:* flavor properties introduced by this feature, their accepted values, and their purpose. Clarify whether \u0027preempt_policy\u0027 is a per-flavor or per-instance override of the global \u0027preemption_mode\u0027 parameter.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"93d1c5c0532c157773b39a8d74252825d49f191e","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"124f03e2_bebbb7e2","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"updated":"2026-07-02 11:24:46.000000000","message":"i had inteded this to be the placemeent resouce class names\n\nhttps://github.com/openstack/os-resource-classes/blob/master/os_resource_classes/__init__.py#L41-L81\n\nincluding teh CUSTOM_* ones\n\n\nso you woudl look at the placment allcoation rather then the flavor\n\nif we want to start with teh flaovr let uses flavor: instead of resouce: and use the flavor name for now\n\nif you fix this to be flavor: or rewirtit to be absed on teh placment allcoation not the flavor then im ok to +2 this.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"cc727a1b_930fe851","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"in_reply_to":"124f03e2_bebbb7e2","updated":"2026-07-02 17:01:47.000000000","message":"I think it makes sense using the placement allocation rather than the flavor because we can extend in the future to use GPUs or other type of resources.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"79936cdc_569eabb7","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"in_reply_to":"3cb5beae_d05f8aaf","updated":"2026-07-09 19:46:12.000000000","message":"this is part of the feature and shoudl be listed in the spec or the **resource:\u003cname\u003e** section shoudl be remvoed\n\nthe spec shoudol cover all its dependencies\n\nideally it would be covered in the data model impact section\n\na spec should be written with the assumation that you will not be the one to implemnet it so i has to capture the design intent and tribal knowalge that we need to extend ti CDM ot accomidate this work","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"d8f2130aa6be031778bbaf9fda9bc97073a67ea8","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3cb5beae_d05f8aaf","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"in_reply_to":"608c80a2_f1187252","updated":"2026-07-07 21:37:46.000000000","message":"Thanks for catching this, dviroel. I think it makes sense. I added as an work item because this is not part of the feature itself. Do you think it is good or need more details?","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"ff17ea8ee6ee3146feec2af87c203d8bdbac1d56","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"6b800c9d_999c7f0b","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"in_reply_to":"79936cdc_569eabb7","updated":"2026-07-10 12:52:47.000000000","message":"The spes still miss details about the CDM extension, the collector implementation part, and the new placement allocations call needed. I wouldn\u0027t not block the spec because of this, but we could provide a follow up to add more details about that within this release.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7f05cc62c3ff1f5fabf8f86cbf25099cacaf3b2e","unresolved":true,"context_lines":[{"line_number":186,"context_line":"  oldest instances are reaped first."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* **resource:\u003cname\u003e**: Evaluated by individual resource dimensions"},{"line_number":189,"context_line":"  from the instance\u0027s flavor. Supported resource names are ``vcpu``,"},{"line_number":190,"context_line":"  ``memory_mb``, and ``disk_gb``. Each resource dimension acts as an"},{"line_number":191,"context_line":"  independent sort key, so operators can control which resource"},{"line_number":192,"context_line":"  matters most and use additional dimensions as tiebreakers. Combined"},{"line_number":193,"context_line":"  with ``dec``, instances with the largest allocation of that specific"}],"source_content_type":"text/x-rst","patch_set":11,"id":"608c80a2_f1187252","line":190,"range":{"start_line":189,"start_character":30,"end_line":190,"end_character":35},"in_reply_to":"cc727a1b_930fe851","updated":"2026-07-07 14:51:01.000000000","message":"While this is good to have, watcher doesn\u0027t provide that information in the CDM. We need to understand how we are going to do that, as we don\u0027t expect any placement call from strategies. We would need to populate CDM with this info during both instance update notification and collector periodic sync. If we want to do this, we need to make this clear in the spec, wdyt?","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5b8aedcd_0c149c2a","line":199,"updated":"2026-07-01 22:45:52.000000000","message":"The spec references instance_cpu_usage_weight and instance_mem_usage_weight (line 200) for the weighted-utilization sort key but does not define these parameters anywhere in the spec. They appear to be pre-existing Watcher configuration but their defaults, weight ranges, and source are unspecified.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators reading this spec cannot configure the weighted-utilization sort mode without external documentation. If these parameters do not yet exist in Watcher, the spec implies an undocumented dependency.\n\n**Suggestion**:\nAdd a brief note clarifying whether these are existing Watcher parameters (with a cross-reference to documentation) or new parameters introduced by this spec. If new, add them to the strategy input parameter list with defaults and descriptions.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"93d1c5c0532c157773b39a8d74252825d49f191e","unresolved":true,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"e7bd42ae_988174cc","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":2},"updated":"2026-07-02 11:24:46.000000000","message":"im still not sure about this.\n\nwe can provceed with it but i kind of feel like utilistaion based premethion is something that shoudl be in a diffent statragey","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":false,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"aedda48a_f7cd8b99","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":2},"in_reply_to":"92c9cd0e_405d3fd8","updated":"2026-07-09 19:46:12.000000000","message":"Acknowledged","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a0bfd5ad5a3ae9cdcfba88927d936fe23a452b29","unresolved":true,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"c3c21033_2aebfb17","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":2},"in_reply_to":"bf29f447_5490d38e","updated":"2026-07-02 13:19:44.000000000","message":"my propsoal to simplfy this si ignore untisioatn entrly for v1 and we can add an workload_sla_enforcer statgey next cycle that can do utilsiaiotn based premeotion or other opertions\n\nwe coudl also extend this if it was clean to do so if needed. but that will simplfy this alot, while leaveing the door open to extend it in the future","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"8be8ae010ee49186479f33fb16bb06895b8a7c49","unresolved":true,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"92c9cd0e_405d3fd8","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":2},"in_reply_to":"c3c21033_2aebfb17","updated":"2026-07-02 17:01:47.000000000","message":"I made some changes in this last patchset to drop all things related to utilization, the weights included. Indeed we can add a new strategy in the future or improve the existing (not yet) one.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"652e431c61c103a4ce0a159a614204bb46a9a6c9","unresolved":true,"context_lines":[{"line_number":196,"context_line":"  disruptions, regardless of the instance\u0027s active internal"},{"line_number":197,"context_line":"  utilization."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* **weighted-utilization**: Evaluated by current active metrics using"},{"line_number":200,"context_line":"  ``instance_cpu_usage_weight`` and ``instance_mem_usage_weight``. Combined"},{"line_number":201,"context_line":"  with ``acc`` (ascending), idle instances are targeted first."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"bf29f447_5490d38e","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":2},"in_reply_to":"e7bd42ae_988174cc","updated":"2026-07-02 12:26:00.000000000","message":"I also have the feeling that this is getting more complicated that it needs to be, for at least the first version of this goal/strategy. I would say that we can simplify this and efficacy indicators.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":264,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":265,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":266,"context_line":"in-memory information, or it can be **deleted**, in which delete the"},{"line_number":267,"context_line":"instance and all associated resources. The way to perform this on an"},{"line_number":268,"context_line":"instance will be via Watcher\u0027s actions and communicating with the Nova"},{"line_number":269,"context_line":"API."},{"line_number":270,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"f1bef645_1eeb2aa8","line":267,"updated":"2026-07-01 22:45:52.000000000","message":"The delete action (line 267) description uses awkward phrasing \u0027in which delete the instance\u0027 which is grammatically incorrect.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Correct grammar improves spec clarity and professionalism.\n\n**Recommendation**:\nRewrite to \u0027or it can be **deleted**, which removes the instance and all associated resources.\u0027","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":272,"context_line":"used via the input parameter ``preemption_mode``. This parameter has a"},{"line_number":273,"context_line":"default value of ``delete``."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"*lifecycle:preempt_policy\u003dshelve|delete*"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"In order to implement these actions, we need to add two new files:"},{"line_number":278,"context_line":"**delete.py** and **shelve.py** under the **watcher/applier/actions/**"}],"source_content_type":"text/x-rst","patch_set":11,"id":"267073d3_bc1f33fe","line":275,"updated":"2026-07-01 22:45:52.000000000","message":"The Actions section (line 275) shows the flavor property as plain italic text \u0027*lifecycle:preempt_policy\u003dshelve|delete*\u0027 rather than in a code-block or double-backtick format like other configuration values in the spec.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Consistent formatting of configuration values improves readability and ensures proper RST rendering. Plain single-asterisk emphasis may render inconsistently and does not use monospace.\n\n**Recommendation**:\nUse double backticks for the property definition: ``lifecycle:preempt_policy\u003dshelve|delete`` to match the formatting style used for other parameters like ``cpu_free_percentage`` and ``preemption_mode``.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    Shelve:"},{"line_number":307,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Alternatives"},{"line_number":310,"context_line":"------------"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7c025384_4655ea93","line":309,"updated":"2026-07-01 22:45:52.000000000","message":"Alternatives section states \u0027None\u0027 but several viable alternatives exist and should be discussed per the watcher-specs template requirements. The template explicitly asks: \u0027What other ways could we do this thing? Why aren\u0027t we using those?\u0027\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Reviewers and future contributors cannot evaluate whether the proposed approach (Watcher-driven preemption) was chosen over alternatives like Nova-native server lifecycle policies, Placement-based allocation enforcement, or external orchestration tools. This weakens the spec\u0027s design rationale.\n\n**Priority**: Before merge\n**Why This Matters**: The watcher-specs template mandates an Alternatives discussion. A bare \u0027None\u0027 on a feature with clear alternative approaches is insufficient for spec approval and violates the template\u0027s explicit guidance.\n\n**Recommendation**:\nDiscuss at minimum: (1) Nova\u0027s existing server shelve/offload API as a user-driven alternative and why Watcher\u0027s automated decision engine is preferred; (2) using Placement reserved resource providers or allocation ratios to manage capacity instead of preemption; (3) external schedulers or orchestration tools. Briefly explain why each was rejected.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"None"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"REST API impact"},{"line_number":320,"context_line":"---------------"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":11,"id":"8cfed9a0_ae47d504","line":319,"updated":"2026-07-01 22:45:52.000000000","message":"REST API impact section states \u0027None\u0027 but the spec adds a new goal, strategy, and two new actions. These appear in Watcher\u0027s API surface: the strategy matrix is API-readable, and the new goal/strategy must be registered for use in AuditTemplate creation.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Reviewers and API consumers cannot assess whether existing AuditTemplate semantics change or whether new API parameters are introduced. The strategy input parameters (cpu_free_percentage, preemption_preference, etc.) are part of the Watcher API contract.\n\n**Suggestion**:\nDocument the API-relevant additions: new goal UUID/name, new strategy UUID/name and its input parameters, and confirm whether any existing API responses change. If no REST endpoint signatures change, state that explicitly but note the new goal/strategy/action registrations.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"None"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Security impact"},{"line_number":325,"context_line":"---------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":11,"id":"af9e9d1c_21ed2962","line":324,"updated":"2026-07-01 22:45:52.000000000","message":"Security impact states \u0027None\u0027 but the spec introduces a mechanism that forcibly terminates or shelves tenant instances. Preemption is a destructive action on tenant workloads, and the flavor property \u0027lifecycle:preemptable\u0027 is the sole gate preventing unauthorized preemption.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: If an operator misconfigures the lifecycle property or if the invariant check fails, non-preemptible tenant instances could be terminated. The spec should acknowledge this risk surface and describe how the mandatory invariant protects against it.\n\n**Suggestion**:\nReplace \u0027None\u0027 with a brief discussion addressing: (1) the destructive nature of preemption on tenant workloads; (2) how the mandatory invariant (lifecycle:preemptable) prevents unauthorized preemption; (3) whether the Watcher service account needs elevated Nova privileges to shelve/delete instances across projects; (4) any risk of resource exhaustion if a single audit triggers mass preemption.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":340,"context_line":"------------------"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"None"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"Other deployer impact"},{"line_number":345,"context_line":"---------------------"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"8ecbdb5d_e15281f3","line":343,"updated":"2026-07-01 22:45:52.000000000","message":"The spec does not mention backward compatibility or upgrade impact. If operators upgrade Watcher to a version with this feature, they need to know whether new goals/strategies auto-register or require explicit configuration.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Clear upgrade guidance prevents operator confusion during deployment of the new feature.\n\n**Recommendation**:\nAdd a note in \u0027Other deployer impact\u0027 clarifying: (1) whether the new goal/strategy appear automatically after upgrade or require database migration; (2) whether existing AuditTemplates are affected; (3) that no instances are preempted until an operator explicitly creates an AuditTemplate using this strategy.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e2c07cc9af89b6a9fd11e7155f73de3c3226289","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":413,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":11,"id":"0845467f_81c43121","line":412,"updated":"2026-07-01 22:45:52.000000000","message":"Reference [3] (Red Hat downstream issue) is listed in the References section but has no RST link target (.. _[3]:) and is never cited inline in the body text, unlike references [1] and [2] which are cited on line 39.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: The reference will render as plain text in built documentation rather than as a proper hyperlink. Sphinx may also emit a warning about uncited reference targets or dangling references.\n\n**Priority**: Before merge\n**Why This Matters**: Consistent RST reference formatting is required for the spec to build cleanly and for readers to navigate external sources. An uncited reference also suggests the source was not actually used in the design discussion.\n\n**Recommendation**:\nEither add a \u0027.. _[3]:\u0027 anchor above the reference entry (matching the pattern used for [1] and [2]) and cite it inline in the problem description, or remove reference [3] if it is not substantively used.","commit_id":"e4f7f9d93342d4ce3edc06a18e50a7758ca5498e"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Additionally, private clouds can leverage this feature for HPC"},{"line_number":20,"context_line":"workloads or AI jobs. Therefore, the key concept is to have a"},{"line_number":21,"context_line":"mechanism to tag instances as \"preemptible\", and when specific"},{"line_number":22,"context_line":"conditions are met—such as a lack of resources to create on-demand"},{"line_number":23,"context_line":"instances—one or more instances will have their resources released."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ee6d8f14_327302ea","line":22,"updated":"2026-07-02 17:20:53.000000000","message":"Non-ASCII em-dash characters (U+2014) appear at lines 22-23 (\u0027met--such\u0027, \u0027instances--one\u0027). The rest of the document uses ASCII punctuation, and the Watcher spec template and OpenStack docs convention prefer plain ASCII for source readability and portability across docutils versions.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Mixing Unicode and ASCII punctuation is inconsistent with the rest of the spec and with sibling specs in this repository; in some docutils/Sphinx configurations non-ASCII characters can trigger encoding warnings under sphinx-build -W.\n\n**Suggestion**:\nReplace the em-dashes with ASCII equivalents, e.g. \u0027conditions are met -- such as\u0027 (spaced hyphen style) or simply \u0027conditions are met, such as\u0027. Run grep -nP for non-ASCII bytes to confirm none remain.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":33,"context_line":"especially because of the high costs associated with it, both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances `[1]`_ `[2]`_. That is, offer instances to use the spare"}],"source_content_type":"text/x-rst","patch_set":12,"id":"125eb28b_764c1b51","line":36,"updated":"2026-07-02 17:20:53.000000000","message":"Grammar error at line 36: \u0027this can also lead to underutilization resources\u0027 is missing \u0027of\u0027 and should read \u0027underutilization of resources\u0027.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: A grammatical error in the opening Problem description reduces clarity of the motivation, which is the section operators read first.\n\n**Suggestion**:\nChange to \u0027but this can also lead to underutilization of resources.\u0027","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":78,"context_line":"This spec adds a new strategy called **Workload Preemption**. Its"},{"line_number":79,"context_line":"functionality is described below."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9a0ea269_faab24b3","line":81,"updated":"2026-07-02 17:20:53.000000000","message":"RST heading hierarchy is broken: the caret (^) adornment (line 81) is used before the tilde (~) adornment (line 140). RST assigns heading levels by order of first appearance, so the levels are inverted and the document outline renders incorrectly.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Rendered TOC and section numbering will be structurally wrong; Sphinx may emit \u0027Title level inconsistent\u0027 warnings, which under sphinx-build -W (-W treats warnings as errors) can fail the docs gate job.\n\n**Priority**: Before merge\n**Why This Matters**: Because \u0027^\u0027 appears before \u0027~\u0027, \u0027^\u0027 becomes H3 and \u0027~\u0027 H4, so the \u0027~\u0027 subsections (Candidate Filtering, Generalized Priority Sorting) render one level too deep under \u0027Candidate Selection and Sorting\u0027. The docs env runs sphinx-build -W, so this can block the gate.\n\n**Recommendation**:\nStandardize the adornment order to \u003d, -, ~, ^ (matching the Watcher template convention). Make \u0027Optimization Target\u0027, \u0027Candidate Selection and Sorting\u0027, and \u0027Efficacy Indicators\u0027 use tilde (~) under the \u0027Strategy\u0027 (-) section, and make \u0027Candidate Filtering \u0026 Invariants\u0027 and \u0027Generalized Priority Sorting\u0027 use caret (^) under \u0027Candidate Selection and Sorting\u0027. Rebuild docs with \u0027tox -e docs\u0027 to confirm no warnings.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":149,"context_line":"  they are explicitly annotated as preemptible via their Flavor"},{"line_number":150,"context_line":"  properties"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"``lifecycle:preemptable\u003dtrue|false``"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"* **Conditional Invariants**: The function filters instances based on"},{"line_number":155,"context_line":"  cloud-specific service level agreements (SLAs) or operating"}],"source_content_type":"text/x-rst","patch_set":12,"id":"6477c871_c6289934","line":152,"updated":"2026-07-02 17:20:53.000000000","message":"Inconsistent flavor property naming: the spec uses \u0027preemptable\u0027 (lifecycle:preemptable) at lines 152 and 331, while the title and all prose use \u0027preemptible\u0027. The canonical Nova flavor extra_specs key is ambiguous, implying different operator and implementer contracts.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Implementers may encode the wrong extra_specs key, operators may tag flavors with a property the strategy never reads, and preemption may silently never fire because the filter looks for a key that does not match what was set on flavors.\n\n**Priority**: Before merge\n**Why This Matters**: A spec\u0027s job is to fix the canonical name of every operator-facing configuration value. An ambiguous property name in an approved spec propagates into incompatible code and misconfigured clouds.\n\n**Recommendation**:\nPick one canonical spelling and use it everywhere. Since the title, blueprint, and prose all say \u0027preemptible\u0027, standardize the flavor property to lifecycle:preemptible (and document every config knob in a small table: lifecycle:preemptible, preemption_mode, preemption_preference, cpu/ram/disk_free_percentage, min_instance_age). State explicitly that this is a Nova flavor extra_specs key.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":247,"context_line":"For the sake of this specification, the strategy can follow two"},{"line_number":248,"context_line":"different policies to preempt an instance. It can be **shelved**,"},{"line_number":249,"context_line":"which keeps all the data and associated resources, but doesn\u0027t retain"},{"line_number":250,"context_line":"in-memory information, or it can be **deleted**, in which delete the"},{"line_number":251,"context_line":"instance and all associated resources. The way to perform this on an"},{"line_number":252,"context_line":"instance will be via Watcher\u0027s actions and communicating with the Nova"},{"line_number":253,"context_line":"API."}],"source_content_type":"text/x-rst","patch_set":12,"id":"1edb4bd4_114d5874","line":250,"updated":"2026-07-02 17:20:53.000000000","message":"Grammar issue at line 250-251: \u0027in which delete the instance and all associated resources\u0027 is ungrammatical and should read \u0027in which case the instance and all associated resources are deleted.\u0027\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: The Actions section defines the two core preemption policies; an ungrammatical description of the delete policy risks implementers misunderstanding the intended behavior.\n\n**Suggestion**:\nReword to: \u0027or it can be deleted, in which case the instance and all associated resources are removed.\u0027","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":265,"context_line":"Their schema is quite simple because we only need to know what is the"},{"line_number":266,"context_line":"instance ID to perform the given action."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":".. code-block::"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    {"},{"line_number":271,"context_line":"        \u0027resource_id\u0027: str  # should be a UUID"}],"source_content_type":"text/x-rst","patch_set":12,"id":"72511e44_0325984f","line":268,"updated":"2026-07-02 17:20:53.000000000","message":"The \u0027code-block\u0027 directive at line 268 has no language specified (\u0027.. code-block::\u0027 with empty argument). The example is a JSON-like schema, so it should declare a language for correct syntax highlighting and to avoid Sphinx ambiguity.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Without a language token Pygments cannot highlight the block and some Sphinx themes render it as plain preformatted text; the block also mixes JSON braces with Python-style \u0027str\u0027 comments, which is itself ambiguous.\n\n**Suggestion**:\nUse \u0027.. code-block:: json\u0027 and convert the value notation to valid JSON (e.g. {\"resource_id\": \"\u003cuuid\u003e\"}), or if it describes a Python type schema use \u0027.. code-block:: python\u0027 with a proper dict. Be consistent with how other Watcher specs annotate action schemas.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":".. code-block::"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    {"},{"line_number":271,"context_line":"        \u0027resource_id\u0027: str  # should be a UUID"},{"line_number":272,"context_line":"    }"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9054285c_31b88835","line":270,"updated":"2026-07-02 17:20:53.000000000","message":"The action schema example at lines 270-272 mixes JSON syntax (curly braces) with Python type-annotation style values (\u0027resource_id\u0027: str and a \u0027# should be a UUID\u0027 comment). This is neither valid JSON nor valid Python and is ambiguous as a contract.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A concrete, language-valid example removes ambiguity for the implementer of delete.py/shelve.py and makes the action schema testable.\n\n**Recommendation**:\nShow a concrete instance, e.g. \u0027.. code-block:: json\u0027 with {\"resource_id\": \"\u003cuuid\u003e\"}, and describe the type constraint (UUID string) in the surrounding prose rather than as an inline comment.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    Shelve:"},{"line_number":291,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Alternatives"},{"line_number":294,"context_line":"------------"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7d5a8bf0_c5a0ad68","line":293,"updated":"2026-07-02 17:20:53.000000000","message":"The \u0027Alternatives\u0027 section (lines 293-296) contains only \u0027None\u0027. The template explicitly asks the author to discuss what other approaches were considered and why they were rejected; for a feature that deletes or shelves user instances, at least one alternative should be acknowledged.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Reviewers cannot see that the chosen strategy design (generalized preemption_preference sorting vs. a fixed policy) was a deliberate decision, weakening the spec\u0027s justification.\n\n**Suggestion**:\nAdd a short paragraph naming 1-2 alternatives (e.g. relying solely on Nova\u0027s existing shelve-offload, or a hardcoded oldest-first policy) and why the generalized configurable approach was preferred. \u0027None\u0027 is acceptable only when genuinely no alternative exists.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"None"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"Data model impact"},{"line_number":299,"context_line":"-----------------"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3def1724_e92f9861","line":298,"updated":"2026-07-02 17:20:53.000000000","message":"The \u0027Data model impact\u0027 (line 298), \u0027REST API impact\u0027 (line 303), and \u0027Security impact\u0027 (line 308) sections are all bare \u0027None\u0027, but the feature adds new strategy parameters, new goal/strategy/efficacy DB-backed objects, and a mechanism that deletes or shelves user-owned instances.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Accurately documenting model/API/security impact prevents surprises during implementation review and addresses the template\u0027s explicit prompts for each area.\n\n**Recommendation**:\nBriefly note: Data model -- new goal/strategy/efficacy indicator records and their parameter schema. REST API -- whether Audit Template needs new parameter fields exposed via watcherclient. Security impact -- preemption forcibly terminates user workloads, so note the access-control assumption and that the lifecycle property must not be settable by unprivileged tenants.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"None"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Other end user impact"},{"line_number":319,"context_line":"---------------------"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1e7937e1_355b9e1a","line":318,"updated":"2026-07-02 17:20:53.000000000","message":"The \u0027Other end user impact\u0027 section (line 318) is \u0027None\u0027, but instance owners are directly affected: their preemptible VMs can be deleted or shelved with only a minimum-age grace window, and there is no note on whether python-watcherclient needs changes for the new parameters.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Documenting user-visible impact (instance may disappear, no migration on shelve-resume) sets correct operator and tenant expectations.\n\n**Recommendation**:\nNote that tenants opting into a preemptible flavor accept best-effort termination, and state whether watcherclient/AuditTemplate CLI needs new flags for the strategy parameters.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":364,"context_line":"Testing"},{"line_number":365,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"* Unit tests will cover the **PreemptInstances** strategy logic (threshold"},{"line_number":368,"context_line":"  evaluation, candidate filtering/invariants, ``preemption_preference``"},{"line_number":369,"context_line":"  sorting, and efficacy indicators), as well as the ``delete`` and"},{"line_number":370,"context_line":"  ``shelve`` actions and their pre/postconditions."}],"source_content_type":"text/x-rst","patch_set":12,"id":"a24aecb0_9bcfc95e","line":367,"updated":"2026-07-02 17:20:53.000000000","message":"The Testing section (lines 364-373) lists unit and tempest tests but omits the trickiest edge cases: min_instance_age enforcement, missing Placement allocation treated as 0, and multi-resource threshold convergence for the \u0027free exactly enough\u0027 stop condition.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Calling out these edge cases in the spec ensures they are covered by tests during implementation rather than discovered as bugs later.\n\n**Recommendation**:\nAdd bullet points for: (1) min_instance_age invariant enforcement, (2) missing-allocation default-to-zero sorting behavior, (3) multi-resource threshold convergence, and (4) the shelve precondition when an instance is already SHELVED.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"5e9c9d70229e9c8630d9d174b25b3c7870ae9563","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":397,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ed5ccd72_a48d1001","line":396,"updated":"2026-07-02 17:20:53.000000000","message":"Reference [3] (the Red Hat downstream issue, lines 396-397) is listed in the References section but is never cited anywhere in the body text. References [1] and [2] are cited at line 39, but [3] is orphaned.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An uncited reference gives reviewers no context for why it is included and violates the intent of the References section (each reference should be reachable from the prose).\n\n**Suggestion**:\nEither cite [3] in the Problem description or Proposed change where downstream demand is discussed, or remove the [3] entry if not needed. If kept, add a sentence such as \u0027This feature is also tracked downstream [3]_\u0027.","commit_id":"18ae33c316296a4199c32e8f5ce1d16b2ffeec13"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"4f7ff6ad69ab0ab8b465419cfe08e3f7a97b41f0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"especially because of the high costs associated with it, both"},{"line_number":34,"context_line":"operational and monetary. At the same time, the actual quota system"},{"line_number":35,"context_line":"only ensures a project to have a fair share of the cloud resources,"},{"line_number":36,"context_line":"but this can also lead to underutilization resources."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A strategy has been already used by hyperscalers: the use of"},{"line_number":39,"context_line":"preemptible instances `[1]`_ `[2]`_. That is, offer instances to use the spare"}],"source_content_type":"text/x-rst","patch_set":13,"id":"71744fe6_11264dff","line":36,"updated":"2026-07-07 21:45:06.000000000","message":"Two grammar issues in the spec affect readability: \u0027underutilization resources\u0027 (missing \u0027of\u0027) and \u0027it is part of the solution release the necessary resources\u0027 (missing \u0027to\u0027).\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: These grammar errors reduce the clarity of the Problem description and Efficacy Indicators sections, which are important for reviewers and operators understanding the spec\u0027s intent.\n\n**Recommendation**:\nLine 36: change to \u0027underutilization of resources\u0027. Line 231: change to \u0027it is part of the solution to release the necessary resources with the fewest instances possible\u0027.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":13,"id":"27d2eed8_1005223c","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":20},"updated":"2026-07-09 19:46:12.000000000","message":"so this is kind of misleading\nits workable right now but the goal of workload optimisation is not to free allcoated reoucse it to optimize the utilation of resouces by existing workloads\n\nthe `Workload Preemption` Stragey will accomplish that by prementing lower poirtiy instance ot ensure capscity for higher periorty instance\n\n\na `Service Assurance` Strategy for the workload optimisaiton goal might achive it by move instances\n\nso the goal of optimsiaiton is not to free resouce that is the stragy we are taking to optimize the resouce usage fo the workloads.\n\nwe should be careful not to conflate the capital G Goal (Workload Optimization) with the lowercase g goal (objective) of the stragey\n\nThis is talking about the lowercase g goal aka the objective of the Strategy","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"ff17ea8ee6ee3146feec2af87c203d8bdbac1d56","unresolved":true,"context_lines":[{"line_number":81,"context_line":"Optimization Target"},{"line_number":82,"context_line":"^^^^^^^^^^^^^^^^^^^^"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The goal of optimization is to ensure a certain percentage of free"},{"line_number":85,"context_line":"allocated resources. To achieve this, instances classified as"},{"line_number":86,"context_line":"preemptible will be chosen, and those selected will be preempted to"},{"line_number":87,"context_line":"free up the allocated resources. This approach allows providers to"},{"line_number":88,"context_line":"offer cheaper instances that utilize spare capacity while still"}],"source_content_type":"text/x-rst","patch_set":13,"id":"ae1d9e03_c683ae0b","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":20},"in_reply_to":"27d2eed8_1005223c","updated":"2026-07-10 12:52:47.000000000","message":"Lets make sure that we clarify this during the implementation, and if needed we update the spec accordingly.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"4f7ff6ad69ab0ab8b465419cfe08e3f7a97b41f0","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* To prioritize reclaiming instances with the largest vCPU and memory"},{"line_number":215,"context_line":"  footprints first, breaking ties with the oldest instances:"},{"line_number":216,"context_line":"  ``[(\u0027resource:vcpu\u0027, \u0027dec\u0027), (\u0027resource:memory_mb\u0027, \u0027asc\u0027), (\u0027age\u0027,"},{"line_number":217,"context_line":"  \u0027dec\u0027)]``"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"The strategy iterates over the sorted candidate list, accumulating freed"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3497e363_3f11fa63","line":216,"updated":"2026-07-07 21:45:06.000000000","message":"The spec defines resource classes as uppercase (VCPU, MEMORY_MB) matching os-resource-classes, but the configuration example uses lowercase (resource:vcpu, resource:memory_mb), which are invalid Placement resource class names.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An implementer following the example would use invalid resource class names, leading to silent failures (zero matches) or incorrect sorting behavior. Operators copying the example into their AuditTemplate would get unexpected results.\n\n**Suggestion**:\nUpdate the example on line 216 to use uppercase resource class names: [(\u0027resource:VCPU\u0027, \u0027dec\u0027), (\u0027resource:MEMORY_MB\u0027, \u0027asc\u0027), (\u0027age\u0027, \u0027dec\u0027)].","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":true,"context_lines":[{"line_number":289,"context_line":"        * The instance should no longer exist"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    Shelve:"},{"line_number":292,"context_line":"        * The instance should be in *SHELVED* state"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Alternatives"},{"line_number":295,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"478139cf_c241c478","line":292,"range":{"start_line":292,"start_character":37,"end_line":292,"end_character":44},"updated":"2026-07-09 19:46:12.000000000","message":"nit: shelved or shelve_offloaded\n\nthre si a race condtion that you cannot avoid and etither state is a valid post condtion.\n\nnova will try to offlow imitealy by default but that can take a little time and you cna concifure nova with an arbitry dely\n\nso watcher cant assume it will not miss the shelved state as it might already be shevled_offloaded when we pool. For Boot form volume vms or nova with ceph storage the offload is effectivly instant because there is no data to copy.\n\nfor vms using local storage we have to upload the root disk to glance which takes a while.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ada1c77e69ee68fe30f2972b7e76d64dc8e54109","unresolved":true,"context_lines":[{"line_number":299,"context_line":"Data model impact"},{"line_number":300,"context_line":"-----------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"None"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"REST API impact"},{"line_number":305,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"c1a415bb_50286e04","line":302,"updated":"2026-07-09 19:46:12.000000000","message":"so here we shoudl be explaing the CDM addtions for instance allcoations form placement.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"4f7ff6ad69ab0ab8b465419cfe08e3f7a97b41f0","unresolved":false,"context_lines":[{"line_number":355,"context_line":"* Create a new goal under decision_engine/goal/goals.py"},{"line_number":356,"context_line":"* Create efficacy indicators under decision_engine/goal/efficacy/indicators.py"},{"line_number":357,"context_line":"* Create a new strategy under decision_engine/strategy/strategies/"},{"line_number":358,"context_line":"* Extend the Compute Data Model (CDM) to store each instance\u0027s"},{"line_number":359,"context_line":"  resource allocation (``vcpu``, ``memory_mb``, ``disk_gb``)"},{"line_number":360,"context_line":"* Add unit, functional, and integration tempest tests"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"f9a669e1_1041deca","line":358,"updated":"2026-07-07 21:45:06.000000000","message":"The \u0027Data model impact\u0027 section declares \u0027None\u0027, yet the \u0027Work Items\u0027 section explicitly lists extending the Compute Data Model (CDM) to store per-instance resource allocations. This is an internal contradiction in the specification.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Reviewers and implementers rely on the Data model impact section to assess migration, upgrade, and compatibility concerns. Stating \u0027None\u0027 when the CDM is being extended understates the scope and may cause reviewers to miss data model implications during spec approval.\n\n**Suggestion**:\nUpdate the \u0027Data model impact\u0027 section to describe the CDM extension: adding per-instance vcpu, memory_mb, and disk_gb allocation fields, and note whether this affects any persisted or serialized data structures or requires CDM version changes.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"4f7ff6ad69ab0ab8b465419cfe08e3f7a97b41f0","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"[2] GCP Spot VMs - https://cloud.google.com/solutions/spot-vms"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"[3] Red Hat downstream issue for this feature -"},{"line_number":400,"context_line":"https://redhat.atlassian.net/browse/RHOSRFE-142"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3ba18ce0_1990a073","line":399,"updated":"2026-07-07 21:45:06.000000000","message":"Reference [3] (Red Hat downstream issue) is listed in the References section but lacks the \u0027.. _[3]:\u0027 link target that references [1] and [2] have, and is never cited with \u0027[3]_\u0027 anywhere in the document body.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Sphinx/docutils will emit warnings about the missing link target. The reference will not be properly hyperlinked in rendered documentation. Additionally, since [3] is never cited in the body, it appears as an orphan reference.\n\n**Recommendation**:\nEither add a \u0027.. _[3]:\u0027 link target before line 399 and cite \u0027[3]_\u0027 in the body text where the Red Hat downstream issue is relevant, or remove the [3] reference if it is not needed as a cited source.","commit_id":"79c9f000b4ab28675b0e479105d0e0831499c528"}]}
