)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca540ed725454f5eebb96c7dd210abb4ddda6c77","unresolved":true,"context_lines":[{"line_number":22,"context_line":"  to itertools.product are greedy and the new strategy needs to"},{"line_number":23,"context_line":"  maintain multiple products in memory at the same time."},{"line_number":24,"context_line":"* do proper testing"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #2089061"},{"line_number":27,"context_line":"Change-Id: Ib7a140374bc91cc9ab597d0923b0623f618ec32c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"e8132154_e6efd99c","line":25,"updated":"2024-12-05 14:53:29.000000000","message":"I tested the performance characteristics of these two changes (max candidates, and round robin) in devstack with two computes each providing 7 IGB PFs each providing 6 VFs. And a VM that requests 6 VFs. \n\n* on master allocation candidate request took 220 seconds and the placement-api service\u0027s RSS moved from 105MB to 650MB during the query, and went back to 120MB after the query returned\n\n* with the fix applied(100k maximum candidates, round robin strategy) the allocation candidate request took 47 seconds and the memory moved from 104MB to 335MB and then back to 125MB.\n\nSo the effect of the 100k candidate limit helps not just with the runtime but also limits the used memory, even if candidate generation is happening in parallel on multiple computes due to round robin strategy.","commit_id":"bc971b26b92c233370243b8496ccd27bd24e8a5a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  to itertools.product are greedy and the new strategy needs to"},{"line_number":23,"context_line":"  maintain multiple products in memory at the same time."},{"line_number":24,"context_line":"* do proper testing"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #2089061"},{"line_number":27,"context_line":"Change-Id: Ib7a140374bc91cc9ab597d0923b0623f618ec32c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"020bed70_a3d72f6e","line":25,"in_reply_to":"8c47a0ad_72f6acc7","updated":"2025-01-08 19:56:48.000000000","message":"ack.\n\ntechnilialy you could have emulated this just with gabbit test or similar but this is all good to see.\n\ni honestly did not expect to see the  memory grow at that rate without the limit\nbut it does make sense givne how many candiates can be generated before we applied the limit without the first patch.\n\n\nthe growth looks pretty linear which also makes sense but means this was not just a performance bug but also a service availability bug.","commit_id":"bc971b26b92c233370243b8496ccd27bd24e8a5a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9273b38c4f0d9750418f5d9a24d2db9948cd7db2","unresolved":true,"context_lines":[{"line_number":22,"context_line":"  to itertools.product are greedy and the new strategy needs to"},{"line_number":23,"context_line":"  maintain multiple products in memory at the same time."},{"line_number":24,"context_line":"* do proper testing"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #2089061"},{"line_number":27,"context_line":"Change-Id: Ib7a140374bc91cc9ab597d0923b0623f618ec32c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"8c47a0ad_72f6acc7","line":25,"in_reply_to":"e8132154_e6efd99c","updated":"2024-12-09 15:14:23.000000000","message":"* devstack from master\n* computes providing 7 pfs, 6vfs each\n* VM requests 6 vfs\n* openstack flavor create --vcpus 1 --ram 2048 --disk 4 --property pci_passthrough:alias\u003d\u0027nic:6\u0027 m1.pci6\n* time openstack server create --image ubuntu-24.04 --flavor m1.pci6 --nic none --use-config-drive vm1 --wait\n* watch \"pgrep -f placementuWSGI | xargs -I \u0027{}\u0027 cat /proc/\u0027{}\u0027/status | grep -i VmRSS\"\n* journalctl -u devstack@placement-api.service  --follow | grep allocation_candidates\n\n\nPerformance results:\n* 2 computes\n  * on master\n    * a_c query time: 212 secs\n    * peak RSS memory: 645MB\n  * with fix\n    * a a_c query time: 45 secs\n    * peak RSS memory: 335MB\n* 4 computes\n  * on master\n    * a_c query time: 477 secs\n    * peak RSS memory: 1200MB\n  * with fix\n    * a a_c query time: 33 secs\n    * peak RSS memory: 330MB\n* 6 computes*\n  * on master\n    * a_c query time: 847 secs\n    * peak RSS memory: 1760MB\n  * with fix\n    * a_c query time: 91 secs\n    * peak RSS memory: 335MB\n\n\n\\* I have a single machine to host these devstack VMs. Due to IO limits 8 computes was not possible to run in parallel and with 6 the system was already very IO bound.","commit_id":"bc971b26b92c233370243b8496ccd27bd24e8a5a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d41cc8f50dbaea5a24643b39ddb23c6fdaf4e542","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4e53dbce_223fbf2a","updated":"2024-12-09 12:18:53.000000000","message":"recheck timeout during log collection","commit_id":"49e58a3cc95b7200be5f798b21f91b752c898a15"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1006b9a8_2d5839d8","updated":"2024-12-10 01:52:19.000000000","message":"This looks good to me. I have commented minor grammar things.\n\nI saw the placement DNM tempest patch above has passed and I have rechecked the nova one (https://review.opendev.org/c/openstack/nova/+/937275).","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6b0d3aaa7626c1b31e8e6e7cb1ff8b293a11583f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1fac2397_1948b310","updated":"2024-12-12 03:47:29.000000000","message":"Changes look good but I think there is a legit sphinx problem in the reno, noted inline.","commit_id":"7700465e28f701a09259261918e9464bf248f5bd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5f8f41d6_c6d1e89a","updated":"2024-12-11 12:38:48.000000000","message":"Thanks @melwittt@gmail.com for the review","commit_id":"7700465e28f701a09259261918e9464bf248f5bd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"94230083_7e9af13f","updated":"2025-01-08 19:56:48.000000000","message":"+2 one question in line","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7612d7cc7c16691b041344f6eeb85a4905dcbca0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3cc96557_21b8562c","updated":"2024-12-12 17:59:05.000000000","message":"LGTM, thanks!","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bd6ef631989dd14fc6342b2509279dfb198ebf63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d4fad37b_be8498eb","updated":"2025-01-09 18:02:45.000000000","message":"Changes look good, thanks","commit_id":"f20e13f0b233753a1b7f1899d24ad03d0d801b68"}],"placement/conf/placement.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":108,"context_line":"multiple children providers under the same root having inventory from the same"},{"line_number":109,"context_line":"resource class (e.g. in case of nova\u0027s mdev GPU or PCI in Placement features)"},{"line_number":110,"context_line":"then the depth-first strategy with a max_allocation_candidates"},{"line_number":111,"context_line":"limit might produces candidates from a limited set of root providers. In the"},{"line_number":112,"context_line":"other hand breadth-first strategy will ensure that the candidates are returned"},{"line_number":113,"context_line":"from all viable roots in a balanced way."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"09ded78f_73a20c98","line":111,"range":{"start_line":111,"start_character":70,"end_line":111,"end_character":72},"updated":"2024-12-10 01:52:19.000000000","message":"On","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":108,"context_line":"multiple children providers under the same root having inventory from the same"},{"line_number":109,"context_line":"resource class (e.g. in case of nova\u0027s mdev GPU or PCI in Placement features)"},{"line_number":110,"context_line":"then the depth-first strategy with a max_allocation_candidates"},{"line_number":111,"context_line":"limit might produces candidates from a limited set of root providers. In the"},{"line_number":112,"context_line":"other hand breadth-first strategy will ensure that the candidates are returned"},{"line_number":113,"context_line":"from all viable roots in a balanced way."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"95482c74_c9e719d1","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":20},"updated":"2024-12-10 01:52:19.000000000","message":"produce","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":108,"context_line":"multiple children providers under the same root having inventory from the same"},{"line_number":109,"context_line":"resource class (e.g. in case of nova\u0027s mdev GPU or PCI in Placement features)"},{"line_number":110,"context_line":"then the depth-first strategy with a max_allocation_candidates"},{"line_number":111,"context_line":"limit might produces candidates from a limited set of root providers. In the"},{"line_number":112,"context_line":"other hand breadth-first strategy will ensure that the candidates are returned"},{"line_number":113,"context_line":"from all viable roots in a balanced way."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"0e943aae_845765ea","line":111,"range":{"start_line":111,"start_character":70,"end_line":111,"end_character":72},"in_reply_to":"09ded78f_73a20c98","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":108,"context_line":"multiple children providers under the same root having inventory from the same"},{"line_number":109,"context_line":"resource class (e.g. in case of nova\u0027s mdev GPU or PCI in Placement features)"},{"line_number":110,"context_line":"then the depth-first strategy with a max_allocation_candidates"},{"line_number":111,"context_line":"limit might produces candidates from a limited set of root providers. In the"},{"line_number":112,"context_line":"other hand breadth-first strategy will ensure that the candidates are returned"},{"line_number":113,"context_line":"from all viable roots in a balanced way."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c0194892_d394327d","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":20},"in_reply_to":"95482c74_c9e719d1","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":true,"context_lines":[{"line_number":91,"context_line":"\"\"\"),"},{"line_number":92,"context_line":"    cfg.StrOpt("},{"line_number":93,"context_line":"        \u0027allocation_candidates_generation_strategy\u0027,"},{"line_number":94,"context_line":"        default\u003d\"depth-first\","},{"line_number":95,"context_line":"        choices\u003d(\"depth-first\", \"breadth-first\"),"},{"line_number":96,"context_line":"        help\u003d\"\"\""},{"line_number":97,"context_line":"Defines the order placement visits viable root providers during allocation"}],"source_content_type":"text/x-python","patch_set":9,"id":"9851f768_c86c3462","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":28},"updated":"2025-01-08 19:56:48.000000000","message":"i think we might want to change this to breadth-first but that should proably be a seperate patch, perhaps early in 2025.2?\n\ncan we add that to your placement spec to discuss.\n\nmy logic is that in general we shoudl return candiatws form as many hosts as possibel to prefer spreading load so breadth-first is a better default but thats not the only factor given numa constiatits.\n\nso to avoid upgrade impacts i agree with keeping ths default to the current behaivor for this cycle.","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f6164249304f83efc0f2d252f8da510ee0c65d74","unresolved":false,"context_lines":[{"line_number":91,"context_line":"\"\"\"),"},{"line_number":92,"context_line":"    cfg.StrOpt("},{"line_number":93,"context_line":"        \u0027allocation_candidates_generation_strategy\u0027,"},{"line_number":94,"context_line":"        default\u003d\"depth-first\","},{"line_number":95,"context_line":"        choices\u003d(\"depth-first\", \"breadth-first\"),"},{"line_number":96,"context_line":"        help\u003d\"\"\""},{"line_number":97,"context_line":"Defines the order placement visits viable root providers during allocation"}],"source_content_type":"text/x-python","patch_set":9,"id":"8bd470ec_ce35d6e8","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":28},"in_reply_to":"9851f768_c86c3462","updated":"2025-01-09 08:30:02.000000000","message":"I\u0027ve added a comment to the spec review. We probably want do decouple of the timeline of the main changes coming from the spec and the changes of the default, but as both topics needs the same context I agree to keep them close.","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"}],"placement/objects/allocation_candidate.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9669fbca0f0a6b40a9da887deb312e41e5b24955","unresolved":true,"context_lines":[{"line_number":733,"context_line":"        # anchors."},{"line_number":734,"context_line":"        return util.roundrobin(*generators)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    raise ValueError(\"Strategy \u0027%s\u0027 not recognized\" % strategy)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":739,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8a93babe_63aa41e7","line":736,"updated":"2024-12-06 17:50:45.000000000","message":"we will never end up here as oslo config has choices defined and will reject any other value.","commit_id":"49e58a3cc95b7200be5f798b21f91b752c898a15"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":false,"context_lines":[{"line_number":733,"context_line":"        # anchors."},{"line_number":734,"context_line":"        return util.roundrobin(*generators)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    raise ValueError(\"Strategy \u0027%s\u0027 not recognized\" % strategy)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":739,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"e9451cd6_2af6a378","line":736,"in_reply_to":"8a93babe_63aa41e7","updated":"2025-01-08 19:56:48.000000000","message":"Ack it will prevent us using invalid data in unit test ectra so im fine leaving this even if its logically dead code.","commit_id":"49e58a3cc95b7200be5f798b21f91b752c898a15"}],"placement/tests/unit/objects/test_allocation_candidate.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":true,"context_lines":[{"line_number":164,"context_line":"        # back to root1 etc. Root2 runs out of candidates earlier than root1 so"},{"line_number":165,"context_line":"        # the last two candidates are both from root1. The root3 is still"},{"line_number":166,"context_line":"        # ignored as it has no candidates for group1."},{"line_number":167,"context_line":"        expected_candidates \u003d ["},{"line_number":168,"context_line":"            (\u0027r1A\u0027, \u0027r1g1A\u0027),"},{"line_number":169,"context_line":"            (\u0027r2A\u0027, \u0027r2g1A\u0027),"},{"line_number":170,"context_line":"            (\u0027r1A\u0027, \u0027r1g1B\u0027),"},{"line_number":171,"context_line":"            (\u0027r2A\u0027, \u0027r2g1B\u0027),"},{"line_number":172,"context_line":"            (\u0027r1B\u0027, \u0027r1g1A\u0027),"},{"line_number":173,"context_line":"            (\u0027r1B\u0027, \u0027r1g1B\u0027)"},{"line_number":174,"context_line":"        ]"},{"line_number":175,"context_line":"        self.assertEqual(expected_candidates, list(generator))"}],"source_content_type":"text/x-python","patch_set":9,"id":"90b7ac92_9f78986a","line":174,"range":{"start_line":167,"start_character":8,"end_line":174,"end_character":9},"updated":"2025-01-08 19:56:48.000000000","message":"nit: this and setting the config option are the only things that actually change between theses  two test so you could have factored that out but ya this looks fine to me","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f6164249304f83efc0f2d252f8da510ee0c65d74","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # back to root1 etc. Root2 runs out of candidates earlier than root1 so"},{"line_number":165,"context_line":"        # the last two candidates are both from root1. The root3 is still"},{"line_number":166,"context_line":"        # ignored as it has no candidates for group1."},{"line_number":167,"context_line":"        expected_candidates \u003d ["},{"line_number":168,"context_line":"            (\u0027r1A\u0027, \u0027r1g1A\u0027),"},{"line_number":169,"context_line":"            (\u0027r2A\u0027, \u0027r2g1A\u0027),"},{"line_number":170,"context_line":"            (\u0027r1A\u0027, \u0027r1g1B\u0027),"},{"line_number":171,"context_line":"            (\u0027r2A\u0027, \u0027r2g1B\u0027),"},{"line_number":172,"context_line":"            (\u0027r1B\u0027, \u0027r1g1A\u0027),"},{"line_number":173,"context_line":"            (\u0027r1B\u0027, \u0027r1g1B\u0027)"},{"line_number":174,"context_line":"        ]"},{"line_number":175,"context_line":"        self.assertEqual(expected_candidates, list(generator))"}],"source_content_type":"text/x-python","patch_set":9,"id":"70cd3f1f_0ce575ff","line":174,"range":{"start_line":167,"start_character":8,"end_line":174,"end_character":9},"in_reply_to":"90b7ac92_9f78986a","updated":"2025-01-09 08:30:02.000000000","message":"It is a good point. As I respin anyhow due to the roundrobin comment I also refactored this.","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"}],"placement/util.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b548f64e1ae08c835be123120978da8599f31bd","unresolved":true,"context_lines":[{"line_number":622,"context_line":"    round-robin fashion."},{"line_number":623,"context_line":"    It is adapted from"},{"line_number":624,"context_line":"    https://docs.python.org/3/library/itertools.html#itertools-recipes"},{"line_number":625,"context_line":"    to work with iterators instead of iterables."},{"line_number":626,"context_line":"    \"\"\""},{"line_number":627,"context_line":"    pending \u003d len(iterators)"},{"line_number":628,"context_line":"    heads \u003d itertools.cycle(iterators)"}],"source_content_type":"text/x-python","patch_set":9,"id":"faf9dcd8_ed50be00","line":625,"updated":"2025-01-08 19:56:48.000000000","message":"ok so your starting poitn was\n\n```\ndef roundrobin(*iterables):\n    \"Visit input iterables in a cycle until each is exhausted.\"\n    # roundrobin(\u0027ABC\u0027, \u0027D\u0027, \u0027EF\u0027) → A D E B F C\n    # Algorithm credited to George Sakkis\n    iterators \u003d map(iter, iterables)\n    for num_active in range(len(iterables), 0, -1):\n        iterators \u003d cycle(islice(iterators, num_active))\n        yield from map(next, iterators)\n```\n\ni would proably have tried just changing ti to this.\n\n```\ndef roundrobin(*iterators):\n    for num_active in range(len(iterators), 0, -1):\n        iterators \u003d itertools.cycle(itertools.islice(iterators, num_active))\n        yield from map(next, iterators)\n\n```\nthat does the same thign as your version.\n```\n\u003e\u003e for i in roundrobin(iter([\u0027a\u0027,\u0027b\u0027,\u0027c\u0027]), iter([\u0027D\u0027]), iter([\u0027E\u0027,\u0027F\u0027])):\n...  print(i)\n... \na\nD\nE\nb\nF\nc\n```\n\nis there ar reasons you didnt just do that?","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4e1c680861bbf3995eff9630a12f26e8a4e185c0","unresolved":false,"context_lines":[{"line_number":622,"context_line":"    round-robin fashion."},{"line_number":623,"context_line":"    It is adapted from"},{"line_number":624,"context_line":"    https://docs.python.org/3/library/itertools.html#itertools-recipes"},{"line_number":625,"context_line":"    to work with iterators instead of iterables."},{"line_number":626,"context_line":"    \"\"\""},{"line_number":627,"context_line":"    pending \u003d len(iterators)"},{"line_number":628,"context_line":"    heads \u003d itertools.cycle(iterators)"}],"source_content_type":"text/x-python","patch_set":9,"id":"69be4c6d_fdbcadbf","line":625,"in_reply_to":"7f45ed3a_bb7acd2b","updated":"2025-01-09 08:33:40.000000000","message":"even the doubling up of iterators at the start can be kept as:\n```\n❯ python3\nPython 3.13.1 (main, Jan  3 2025, 10:26:34) [GCC 14.2.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e l \u003d \"ABC\"\n\u003e\u003e\u003e i \u003d iter(l)\n\u003e\u003e\u003e ii \u003d iter(i)\n\u003e\u003e\u003e next(ii)\n\u0027A\u0027\n\u003e\u003e\u003e \n```","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f6164249304f83efc0f2d252f8da510ee0c65d74","unresolved":false,"context_lines":[{"line_number":622,"context_line":"    round-robin fashion."},{"line_number":623,"context_line":"    It is adapted from"},{"line_number":624,"context_line":"    https://docs.python.org/3/library/itertools.html#itertools-recipes"},{"line_number":625,"context_line":"    to work with iterators instead of iterables."},{"line_number":626,"context_line":"    \"\"\""},{"line_number":627,"context_line":"    pending \u003d len(iterators)"},{"line_number":628,"context_line":"    heads \u003d itertools.cycle(iterators)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f45ed3a_bb7acd2b","line":625,"in_reply_to":"faf9dcd8_ed50be00","updated":"2025-01-09 08:30:02.000000000","message":"I have no right answer for that. I guess I hit some issue when using the original version and I thought that was due to the iterator / iterable differences. Went with a different solution and never realized that the actual fix for that problem was not in the roundrobin code but somewhere on the caller side. Now I just plugged in the original with the fixed imports and it passes the existing tests, so you are right, we should go with the original algo.","commit_id":"e471db9574a3350e7e2038cbc3a10fd61559a186"}],"releasenotes/notes/bug-2070257-allocation-candidates-generation-limit-and-strategy.yaml-e73796898163fb55.yaml":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    parameter provided in the allocation candidate query to be able do a random"},{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"1bbca7cd_41aa5956","line":23,"range":{"start_line":23,"start_character":49,"end_line":23,"end_character":58},"updated":"2024-12-10 01:52:19.000000000","message":"generate","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    parameter provided in the allocation candidate query to be able do a random"},{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"276c2d00_34dbea5d","line":23,"range":{"start_line":23,"start_character":59,"end_line":23,"end_character":64},"updated":"2024-12-10 01:52:19.000000000","message":"this","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    parameter provided in the allocation candidate query to be able do a random"},{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"c77b2bc3_4df4a9dc","line":23,"range":{"start_line":23,"start_character":49,"end_line":23,"end_character":58},"in_reply_to":"1bbca7cd_41aa5956","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    parameter provided in the allocation candidate query to be able do a random"},{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"64fa097b_aec968b5","line":23,"range":{"start_line":23,"start_character":59,"end_line":23,"end_character":64},"in_reply_to":"276c2d00_34dbea5d","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"cc64c3fd_6ef98b3c","line":24,"range":{"start_line":24,"start_character":47,"end_line":24,"end_character":52},"updated":"2024-12-10 01:52:19.000000000","message":"time\n\n(this and the next two depend on the use of the word \"might\")","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    sampling if ``[placement]randomize_allocation_candidates`` is True."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"eec9f4c9_e0a8ceb0","line":24,"range":{"start_line":24,"start_character":47,"end_line":24,"end_character":52},"in_reply_to":"cc64c3fd_6ef98b3c","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"70e3cb9c_d2d70476","line":25,"range":{"start_line":25,"start_character":65,"end_line":25,"end_character":72},"updated":"2024-12-10 01:52:19.000000000","message":"crash","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"6045e83c_524ecc0f","line":25,"range":{"start_line":25,"start_character":42,"end_line":25,"end_character":46},"updated":"2024-12-10 01:52:19.000000000","message":"run","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"0f6b0fcc_2f338865","line":25,"range":{"start_line":25,"start_character":42,"end_line":25,"end_character":46},"in_reply_to":"6045e83c_524ecc0f","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Placement takes excessive time and memory to generates these amount of"},{"line_number":24,"context_line":"    allocation candidates and the client might times out waiting for the"},{"line_number":25,"context_line":"    response or the Placement API service runs out of memory and crashes."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"661b2aa4_00a9efb1","line":25,"range":{"start_line":25,"start_character":65,"end_line":25,"end_character":72},"in_reply_to":"70e3cb9c_d2d70476","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"},{"line_number":29,"context_line":"    limit is applied not after like the request limit but *during* the"},{"line_number":30,"context_line":"    candidate generation process. So this new option can be used to limit the"},{"line_number":31,"context_line":"    runtime and memory consumption of the Placement API service."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"6a42bb8e_2657d670","line":29,"range":{"start_line":29,"start_character":31,"end_line":29,"end_character":35},"updated":"2024-12-10 01:52:19.000000000","message":"Seems like \"like\" shouldn\u0027t be here","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    To avoid request timeout or out of memory events a new"},{"line_number":28,"context_line":"    ``[placement]max_allocation_candidates`` config option is implemented. This"},{"line_number":29,"context_line":"    limit is applied not after like the request limit but *during* the"},{"line_number":30,"context_line":"    candidate generation process. So this new option can be used to limit the"},{"line_number":31,"context_line":"    runtime and memory consumption of the Placement API service."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"6e0c1495_d304cabf","line":29,"range":{"start_line":29,"start_character":31,"end_line":29,"end_character":35},"in_reply_to":"6a42bb8e_2657d670","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    timeout setting of the clients. A good initial value could be around"},{"line_number":37,"context_line":"    ``100000``."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"f2c3e9bf_610c5ff1","line":39,"range":{"start_line":39,"start_character":65,"end_line":39,"end_character":67},"updated":"2024-12-10 01:52:19.000000000","message":"by the","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    timeout setting of the clients. A good initial value could be around"},{"line_number":37,"context_line":"    ``100000``."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"775f4417_9182d395","line":39,"range":{"start_line":39,"start_character":53,"end_line":39,"end_character":56},"updated":"2024-12-10 01:52:19.000000000","message":"is\n\n(because of \"the number\")","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    timeout setting of the clients. A good initial value could be around"},{"line_number":37,"context_line":"    ``100000``."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7e7ee365_a5e6d18a","line":39,"range":{"start_line":39,"start_character":53,"end_line":39,"end_character":56},"in_reply_to":"775f4417_9182d395","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    timeout setting of the clients. A good initial value could be around"},{"line_number":37,"context_line":"    ``100000``."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"13e4f9f3_11f9ae26","line":39,"range":{"start_line":39,"start_character":65,"end_line":39,"end_character":67},"in_reply_to":"f2c3e9bf_610c5ff1","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"},{"line_number":43,"context_line":"    candidates from the first root before considering the next one. To avoid"},{"line_number":44,"context_line":"    issue a new config option"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"8e03bea5_c6b0184b","line":41,"range":{"start_line":41,"start_character":65,"end_line":41,"end_character":73},"updated":"2024-12-10 01:52:19.000000000","message":"compute","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    If the number of generated allocation candidates are limited by"},{"line_number":40,"context_line":"    ``[placement]max_allocation_candidates`` config option then it is possible"},{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"},{"line_number":43,"context_line":"    candidates from the first root before considering the next one. To avoid"},{"line_number":44,"context_line":"    issue a new config option"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9127a968_755261ef","line":41,"range":{"start_line":41,"start_character":65,"end_line":41,"end_character":73},"in_reply_to":"8e03bea5_c6b0184b","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23bacf4c87c20286381e80fb3fb98ac5902c4a0f","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"},{"line_number":43,"context_line":"    candidates from the first root before considering the next one. To avoid"},{"line_number":44,"context_line":"    issue a new config option"},{"line_number":45,"context_line":"    ``[placement]allocation_candidates_generation_strategy`` is introduced"},{"line_number":46,"context_line":"    with two possible values:"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"bb88c37b_ca1e6078","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":9},"updated":"2024-12-10 01:52:19.000000000","message":"this issue or the issue","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93a71d06af9becb434ec2a988748e442fb06422","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    to get candidates from a limited set of root providers (e.g. computes"},{"line_number":42,"context_line":"    nodes) as placement uses a depth-first strategy, i.e. generating all"},{"line_number":43,"context_line":"    candidates from the first root before considering the next one. To avoid"},{"line_number":44,"context_line":"    issue a new config option"},{"line_number":45,"context_line":"    ``[placement]allocation_candidates_generation_strategy`` is introduced"},{"line_number":46,"context_line":"    with two possible values:"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"e1f18ad1_d9ce5406","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":9},"in_reply_to":"bb88c37b_ca1e6078","updated":"2024-12-11 12:38:48.000000000","message":"Done","commit_id":"96f6ab5c21a243a4e8be7a2b45997e58591d9a67"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6b0d3aaa7626c1b31e8e6e7cb1ff8b293a11583f","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    Placement features) if the allocation candidate request asks for resources"},{"line_number":8,"context_line":"    from those children RPs in multiple request groups the number of possible"},{"line_number":9,"context_line":"    allocation candidates grows rapidly."},{"line_number":10,"context_line":"    E.g.:"},{"line_number":11,"context_line":"      * 1 root, 8 child RPs with 1 unit of resource each"},{"line_number":12,"context_line":"        a_c requests 6 groups with 1 unit of resource each"},{"line_number":13,"context_line":"        \u003d\u003e 8*7*6*5*4*3\u003d20160 possible candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"0effc03d_dfd3399d","line":10,"updated":"2024-12-12 03:47:29.000000000","message":"Sorry I didn\u0027t notice the build-openstack-releasenotes job failure on this patch looks legit. The error message isn\u0027t too helpful `\u003creno.sphinxext current branch\u003e:60: ERROR: Unexpected indentation. [docutils]` but trying something locally, the releasenotes tox target started passing if I added a blank line here.","commit_id":"7700465e28f701a09259261918e9464bf248f5bd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"66b6af49cb3685a27156665d7951d51bd1a1ade6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    Placement features) if the allocation candidate request asks for resources"},{"line_number":8,"context_line":"    from those children RPs in multiple request groups the number of possible"},{"line_number":9,"context_line":"    allocation candidates grows rapidly."},{"line_number":10,"context_line":"    E.g.:"},{"line_number":11,"context_line":"      * 1 root, 8 child RPs with 1 unit of resource each"},{"line_number":12,"context_line":"        a_c requests 6 groups with 1 unit of resource each"},{"line_number":13,"context_line":"        \u003d\u003e 8*7*6*5*4*3\u003d20160 possible candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bf12633f_1836a46c","line":10,"in_reply_to":"0effc03d_dfd3399d","updated":"2024-12-12 16:09:05.000000000","message":"Fixed it now.","commit_id":"7700465e28f701a09259261918e9464bf248f5bd"}]}
