)]}'
{"specs/backlog/approved/ordered-filter-scheduler.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/ordered-filter-scheduler"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Proposal for a new simpler to configure scheduler that works only with an"},{"line_number":14,"context_line":"order set of filters."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\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":4,"id":"7a740942_769bd618","line":14,"updated":"2015-12-12 14:56:06.000000000","message":"ordered","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e6bf3a675f4dfd10377aff3bf167b36fed06f662","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"This backlog spec proposes a new metal model for the scheduler, and gives a"},{"line_number":50,"context_line":"rough idea of how that might be implemented."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"The scheduler is trying to decide which hosts are the best candidates for a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_cf03320f","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":38},"updated":"2015-12-11 15:14:05.000000000","message":"mental","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":66,"context_line":"hard requirements."},{"line_number":67,"context_line":"The order of the hard requirements will be to rule out as many hosts as"},{"line_number":68,"context_line":"possible as quickly as possible, to improve the efficiency of the tests."},{"line_number":69,"context_line":"For the soft requirements, you to see what tests all the remaining hosts"},{"line_number":70,"context_line":"pass. To compare what is a better fit, we can use the ordered list to generate"},{"line_number":71,"context_line":"a bit field, and you can sort the list using the number generated from the bit"},{"line_number":72,"context_line":"field."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_169cd20c","line":69,"updated":"2015-12-12 14:56:06.000000000","message":"missing verb after \"you\". Get? Need? Want? Can?","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":67,"context_line":"The order of the hard requirements will be to rule out as many hosts as"},{"line_number":68,"context_line":"possible as quickly as possible, to improve the efficiency of the tests."},{"line_number":69,"context_line":"For the soft requirements, you to see what tests all the remaining hosts"},{"line_number":70,"context_line":"pass. To compare what is a better fit, we can use the ordered list to generate"},{"line_number":71,"context_line":"a bit field, and you can sort the list using the number generated from the bit"},{"line_number":72,"context_line":"field."},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_36a1ce46","line":70,"updated":"2015-12-12 14:56:06.000000000","message":"Is this the ordered list of all requirements or just the soft ones.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e7dae8c6f6c66b98fb9bc6391e1ea0a7043a087","unresolved":false,"context_lines":[{"line_number":67,"context_line":"The order of the hard requirements will be to rule out as many hosts as"},{"line_number":68,"context_line":"possible as quickly as possible, to improve the efficiency of the tests."},{"line_number":69,"context_line":"For the soft requirements, you to see what tests all the remaining hosts"},{"line_number":70,"context_line":"pass. To compare what is a better fit, we can use the ordered list to generate"},{"line_number":71,"context_line":"a bit field, and you can sort the list using the number generated from the bit"},{"line_number":72,"context_line":"field."},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_2bc86054","line":70,"in_reply_to":"7a740942_36a1ce46","updated":"2015-12-14 11:54:55.000000000","message":"good point, I mean soft ones here, but the reason why is quite subtal really, I should be more explicit on that.\n\nI should make it clearer about my plan for hard requirements, given jichenjc\u0027s comment below.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* host1 \u003d A: pass, B: fail, C: fail (i.e. 100 \u003d 4)"},{"line_number":78,"context_line":"* host2 \u003d A: pass, B: pass, C: pass (i.e. 111 \u003d 7)"},{"line_number":79,"context_line":"* host3 \u003d A: fail, B: pass, C: pass (i.e. 011 \u003d 3)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"That gives us the following preference order: host2, host1, host3."},{"line_number":82,"context_line":"Note that if a host passes the A test, it is always prefered over anything"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_d68acabe","line":79,"updated":"2015-12-12 14:56:06.000000000","message":"That\u0027s pleasingly clever. I have lurking in the back of my mind an insane idea for ordering or clustering of multi-dimensional vectors as a way of satisfying scheduler requests. This is much more sane.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3f570140c58d9339b0d698f44fa610d4ee8875f5","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"That gives us the following preference order: host2, host1, host3."},{"line_number":82,"context_line":"Note that if a host passes the A test, it is always prefered over anything"},{"line_number":83,"context_line":"where the A test fails, thus preserving the operators configured ordering."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"We should now consider the case where the user wants to minimize the number of"},{"line_number":86,"context_line":"servers on each host. With the older scheduler, this would be a weigher, and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_e20ab21f","line":83,"updated":"2015-12-11 20:10:29.000000000","message":"if 2 hard limit exist, how we priority them and will we allow configuration of them?\nif we use binary method above, considering A,B are both hard limit , then if we we take above sample, host1 A pass and B fail while host3 A fail and B pass, then in any case, we will select host1 ,host3 don\u0027t have a chance.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e7dae8c6f6c66b98fb9bc6391e1ea0a7043a087","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"That gives us the following preference order: host2, host1, host3."},{"line_number":82,"context_line":"Note that if a host passes the A test, it is always prefered over anything"},{"line_number":83,"context_line":"where the A test fails, thus preserving the operators configured ordering."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"We should now consider the case where the user wants to minimize the number of"},{"line_number":86,"context_line":"servers on each host. With the older scheduler, this would be a weigher, and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_ab8d3032","line":83,"in_reply_to":"7a740942_e20ab21f","updated":"2015-12-14 11:54:55.000000000","message":"hard limits don\u0027t need an order, as any failure just drops the host from the list. I can be more explicit about that.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":87,"context_line":"it would just contribute (proportionally) to the overall weight. In this"},{"line_number":88,"context_line":"filter only system, we can add a threshold to that concept, to get a boolean"},{"line_number":89,"context_line":"response. So to \"minimize the number of servers on each host\", we can convert"},{"line_number":90,"context_line":"this to \"prefer the hosts in the lowest 25% of hosts based on server counts\","},{"line_number":91,"context_line":"assuming that if there are less than 4 hosts, it just picks the lowest count."},{"line_number":92,"context_line":"This is clearly not as expressive as the previous weigher, but it is easier"},{"line_number":93,"context_line":"to understand how the test will relate to all the other tests in the list."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_f687c6b2","line":90,"updated":"2015-12-12 14:56:06.000000000","message":"The scheduler knows about all the hosts and can know their current usage, yes? So it does the calculations to figure out the percentiles?","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9114e4bfd1a743bff41b7a23025fa2f25f04c454","unresolved":false,"context_lines":[{"line_number":87,"context_line":"it would just contribute (proportionally) to the overall weight. In this"},{"line_number":88,"context_line":"filter only system, we can add a threshold to that concept, to get a boolean"},{"line_number":89,"context_line":"response. So to \"minimize the number of servers on each host\", we can convert"},{"line_number":90,"context_line":"this to \"prefer the hosts in the lowest 25% of hosts based on server counts\","},{"line_number":91,"context_line":"assuming that if there are less than 4 hosts, it just picks the lowest count."},{"line_number":92,"context_line":"This is clearly not as expressive as the previous weigher, but it is easier"},{"line_number":93,"context_line":"to understand how the test will relate to all the other tests in the list."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_159aa86e","line":90,"updated":"2015-12-11 16:07:47.000000000","message":"What\u0027s not clear to me is how to determine that a host is in the lowest 25%.  This requires each host have information about other hosts, or some other mechanism to determine that information and pass it in to the filter.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e467d69cb1082e2a6bb06d337946fb5c88772e7a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"it would just contribute (proportionally) to the overall weight. In this"},{"line_number":88,"context_line":"filter only system, we can add a threshold to that concept, to get a boolean"},{"line_number":89,"context_line":"response. So to \"minimize the number of servers on each host\", we can convert"},{"line_number":90,"context_line":"this to \"prefer the hosts in the lowest 25% of hosts based on server counts\","},{"line_number":91,"context_line":"assuming that if there are less than 4 hosts, it just picks the lowest count."},{"line_number":92,"context_line":"This is clearly not as expressive as the previous weigher, but it is easier"},{"line_number":93,"context_line":"to understand how the test will relate to all the other tests in the list."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_f0279fc7","line":90,"in_reply_to":"7a740942_2bcce087","updated":"2015-12-14 14:16:43.000000000","message":"The scheduler does know about all hosts, but the filters currently do not.  So we\u0027re looking at a two pass system, one to get global data that filters need and then another pass with the filters.  That\u0027s fine.  My question was more about getting that information into the filters without modifying the interface so that existing filters could be used with the new scheduler driver.  I just want to be clear if we\u0027re going to update the interface, or to find some other way to get that data to the filters.\n\nJohn, the code you\u0027ve pointed out is something that\u0027s run after all of the weighers are run, so it would not work to pass in data to the weighers.  Or filters since we\u0027re talking of applying the pattern there.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08aeff565b3842d5b6019999b7a1dbf9740dd980","unresolved":false,"context_lines":[{"line_number":87,"context_line":"it would just contribute (proportionally) to the overall weight. In this"},{"line_number":88,"context_line":"filter only system, we can add a threshold to that concept, to get a boolean"},{"line_number":89,"context_line":"response. So to \"minimize the number of servers on each host\", we can convert"},{"line_number":90,"context_line":"this to \"prefer the hosts in the lowest 25% of hosts based on server counts\","},{"line_number":91,"context_line":"assuming that if there are less than 4 hosts, it just picks the lowest count."},{"line_number":92,"context_line":"This is clearly not as expressive as the previous weigher, but it is easier"},{"line_number":93,"context_line":"to understand how the test will relate to all the other tests in the list."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_e0090a32","line":90,"in_reply_to":"7a740942_f0279fc7","updated":"2015-12-14 15:01:17.000000000","message":"Yes, that code reference is nonsense, sorry.\n\nAdded a better reference in the follow up version.\n\nIt should better describe how I expect a \"soft\" filter to work. In that way, all the non-\"hard\" excluded hosts get passed it. I guess I was assuming the 25% was of \"possible\" slots, i.e. those that pass the \"hard\" filters. I guess thats not totally clear, and a bit messy.\n\nI really just want this to be clear about there being a problem to fix, rather than the specifics of the implementation here, as a backlog spec, but lets see how the updated one looks I guess.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e7dae8c6f6c66b98fb9bc6391e1ea0a7043a087","unresolved":false,"context_lines":[{"line_number":87,"context_line":"it would just contribute (proportionally) to the overall weight. In this"},{"line_number":88,"context_line":"filter only system, we can add a threshold to that concept, to get a boolean"},{"line_number":89,"context_line":"response. So to \"minimize the number of servers on each host\", we can convert"},{"line_number":90,"context_line":"this to \"prefer the hosts in the lowest 25% of hosts based on server counts\","},{"line_number":91,"context_line":"assuming that if there are less than 4 hosts, it just picks the lowest count."},{"line_number":92,"context_line":"This is clearly not as expressive as the previous weigher, but it is easier"},{"line_number":93,"context_line":"to understand how the test will relate to all the other tests in the list."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_2bcce087","line":90,"in_reply_to":"7a740942_f687c6b2","updated":"2015-12-14 11:54:55.000000000","message":"I think it just involves using the template pattern to allow subclasses to act on the results of a full run, in here:\nhttps://github.com/openstack/nova/blob/master/nova/weights.py#L143\n\nI didn\u0027t really want that level of detail in here, but I could add a note about that.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e6bf3a675f4dfd10377aff3bf167b36fed06f662","unresolved":false,"context_lines":[{"line_number":105,"context_line":"Alternatives"},{"line_number":106,"context_line":"------------"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Rather than loosing the weights system, we could include the above \"soft"},{"line_number":109,"context_line":"filter\" system as an additional weigher, but this fights against the goal of"},{"line_number":110,"context_line":"making the system simpler to understand."},{"line_number":111,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_0a6a88b3","line":108,"range":{"start_line":108,"start_character":12,"end_line":108,"end_character":19},"updated":"2015-12-11 15:14:05.000000000","message":"losing","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"History wise, its worth noting that the normalizing of the weights was a"},{"line_number":113,"context_line":"previous attempt to make weights easier to understand and combine."},{"line_number":114,"context_line":"There are proposals for different normalizations that better preserver the"},{"line_number":115,"context_line":"relative magnitude (assuming the weights are either all positive or all"},{"line_number":116,"context_line":"negative), but there is still a lot of interplay between the different"},{"line_number":117,"context_line":"weighers that can be hard to fully understand."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_9690c2ee","line":114,"updated":"2015-12-12 14:56:06.000000000","message":"preserve","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9114e4bfd1a743bff41b7a23025fa2f25f04c454","unresolved":false,"context_lines":[{"line_number":168,"context_line":"Other deployer impact"},{"line_number":169,"context_line":"---------------------"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"This could be implemented as a parallel alternative to the current filter"},{"line_number":172,"context_line":"scheduler."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"For ease of transition, its possible existing filters could be the new ordered"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_f5735c4c","line":171,"updated":"2015-12-11 16:07:47.000000000","message":"Not could, but should/will.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e7dae8c6f6c66b98fb9bc6391e1ea0a7043a087","unresolved":false,"context_lines":[{"line_number":168,"context_line":"Other deployer impact"},{"line_number":169,"context_line":"---------------------"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"This could be implemented as a parallel alternative to the current filter"},{"line_number":172,"context_line":"scheduler."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"For ease of transition, its possible existing filters could be the new ordered"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a740942_8b0714c9","line":171,"in_reply_to":"7a740942_f5735c4c","updated":"2015-12-14 11:54:55.000000000","message":"oops, yes.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6796597166327be2fb9fb4fd02b05154e648490","unresolved":false,"context_lines":[{"line_number":205,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This would need to have some functional testing, ideally by moving"},{"line_number":208,"context_line":"some of the gate jobs to the new scheduler system."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Documentation Impact"},{"line_number":211,"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":4,"id":"7a740942_b68dbed4","line":208,"updated":"2015-12-12 14:56:06.000000000","message":"Agree with alaski","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9114e4bfd1a743bff41b7a23025fa2f25f04c454","unresolved":false,"context_lines":[{"line_number":205,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This would need to have some functional testing, ideally by moving"},{"line_number":208,"context_line":"some of the gate jobs to the new scheduler system."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Documentation Impact"},{"line_number":211,"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":4,"id":"7a740942_7509ac83","line":208,"updated":"2015-12-11 16:07:47.000000000","message":"I\u0027m not sure we should attempt to test schedulers via the tempest jobs.  Eventually the number of schedulers could increase to be more than the number of jobs, and this is not really a third party thing so I wouldn\u0027t expect outside CI systems to test these.\n\nI think this is an ideal candidate for functional tests in tree.  We should have a framework in place for testing schedulers.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6e7dae8c6f6c66b98fb9bc6391e1ea0a7043a087","unresolved":false,"context_lines":[{"line_number":205,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"This would need to have some functional testing, ideally by moving"},{"line_number":208,"context_line":"some of the gate jobs to the new scheduler system."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Documentation Impact"},{"line_number":211,"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":4,"id":"7a740942_cb6afc80","line":208,"in_reply_to":"7a740942_b68dbed4","updated":"2015-12-14 11:54:55.000000000","message":"yeah, agreed with in tree functional testing. I guess I was hoping to one day make this the default scheduler, because it would be easier to use.","commit_id":"569614964823131f02dfee92dbb9069862ddf600"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"6e23a911959888bb32b15927dd49f37515842b52","unresolved":false,"context_lines":[{"line_number":62,"context_line":"An example would be having enough resources on the host for the build request."},{"line_number":63,"context_line":"At some point, you switch from hard requirements to soft requirements."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"This leaves us with a ordered list of soft requirements, and an order list of"},{"line_number":66,"context_line":"hard requirements."},{"line_number":67,"context_line":"The order of the hard requirements will be to rule out as many hosts as"},{"line_number":68,"context_line":"possible as quickly as possible, to improve the efficiency of the tests."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a710552_3d8f0425","line":65,"range":{"start_line":65,"start_character":64,"end_line":65,"end_character":69},"updated":"2015-12-15 04:51:38.000000000","message":"nit: ordered","commit_id":"e4d4574547aee0dbe9d6d0e42a34389bf1bcd87a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"22c743f072a0ac62511f5a528d998b318bcb68b3","unresolved":false,"context_lines":[{"line_number":108,"context_line":"to understand how the test will relate to all the other tests in the list."},{"line_number":109,"context_line":"Note this will require filter subclasses to override the filter_all method in"},{"line_number":110,"context_line":"the base class that allows filters to consider the full list of objects that"},{"line_number":111,"context_line":"are being filtered."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Interesting observations about this approach:"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a740942_d7f04fff","line":111,"updated":"2015-12-14 16:43:47.000000000","message":"As I mentioned below, I\u0027m growing uncertain that the existing filters could be dual purposed because of things like this.  Not that filter_all wouldn\u0027t work, but the return format would need to be different based on the scheduler that called it.  Or the filter scheduler would need to be updated to use a new return format.  But it\u0027s not important that the filters be reusable.","commit_id":"e4d4574547aee0dbe9d6d0e42a34389bf1bcd87a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"22c743f072a0ac62511f5a528d998b318bcb68b3","unresolved":false,"context_lines":[{"line_number":190,"context_line":"scheduler."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"For ease of transition, its possible existing filters could be the new ordered"},{"line_number":193,"context_line":"filter scheduler."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Either way, the current proposal would have a massive impact on the deployer"},{"line_number":196,"context_line":"if they chose to adopt the new ordered filter scheduler."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a740942_b73ee3b5","line":193,"updated":"2015-12-14 16:43:47.000000000","message":"The more I think about this the more I\u0027m unsure that this is going to be feasible, at least not without some modifications to the current filters/filter_scheduler.  But it\u0027s a minor point in the spec and can be looked at in depth when there\u0027s actual code.","commit_id":"e4d4574547aee0dbe9d6d0e42a34389bf1bcd87a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The configuration for the current filter scheduler is surprisingly hard to"},{"line_number":20,"context_line":"reason about. Many times its only with simulations you fully understand what"},{"line_number":21,"context_line":"the current configuration means."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Currently implementing the option for a hard vs soft requirement means you"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_ce7187aa","line":20,"updated":"2016-04-24 16:33:45.000000000","message":"s/its/it\u0027s/","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Non-technical people need to understand the intent of the current scheduler"},{"line_number":30,"context_line":"configuration, so they can participate in evolving the scheduler\u0027s"},{"line_number":31,"context_line":"configuration."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"It should be simple to switch between something you want for a host, based on"},{"line_number":34,"context_line":"the given request, being a hard or a soft requirement."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_2e691bbf","line":31,"updated":"2016-04-24 16:33:45.000000000","message":"I\u0027m not sure this is really a use case I care about. Does the Linux kernel scheduler need to change in order for non-technical people to participate in evolving the scheduler\u0027s configuration? I would rather that implementation stay in the realm of technical folks and have product managers and technical leads translate requirements into implementation proposals instead of changing the implementation of the scheduler configuration in order for non-technical people to mess with the scheduler and introduce a greater surface are for configuration bugs to be introduced.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Non-technical people need to understand the intent of the current scheduler"},{"line_number":30,"context_line":"configuration, so they can participate in evolving the scheduler\u0027s"},{"line_number":31,"context_line":"configuration."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"It should be simple to switch between something you want for a host, based on"},{"line_number":34,"context_line":"the given request, being a hard or a soft requirement."}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_a8106fa9","line":31,"in_reply_to":"1a122d0e_2e691bbf","updated":"2016-05-09 14:24:35.000000000","message":"its more about non-developers knowing how to configure the system, I should be more clear.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"configuration."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"It should be simple to switch between something you want for a host, based on"},{"line_number":34,"context_line":"the given request, being a hard or a soft requirement."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Here are some example scheduler requirements, in a preference order:"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_0e641fe3","line":34,"updated":"2016-04-24 16:33:45.000000000","message":"The above is not a use case.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":31,"context_line":"configuration."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"It should be simple to switch between something you want for a host, based on"},{"line_number":34,"context_line":"the given request, being a hard or a soft requirement."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Here are some example scheduler requirements, in a preference order:"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_28aabf70","line":34,"in_reply_to":"1a122d0e_0e641fe3","updated":"2016-05-09 14:24:35.000000000","message":"It happens regularly to me.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Here are some example scheduler requirements, in a preference order:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"* There must be enough RAM"},{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_6e6313dd","line":39,"updated":"2016-04-24 16:33:45.000000000","message":"This has nothing to do with scheduling policy. If this is a business requirement, then the admin should `nova service-disable $host nova-compute` to remove the compute node from scheduling. Simple as that.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Here are some example scheduler requirements, in a preference order:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"* There must be enough RAM"},{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_6864c748","line":39,"in_reply_to":"1a122d0e_6e6313dd","updated":"2016-05-09 14:24:35.000000000","message":"Yeah, this is a bad example.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"* There must be enough RAM"},{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_4e5e1713","line":41,"updated":"2016-04-24 16:33:45.000000000","message":"What does \"try\" mean? Either do it, or don\u0027t do it. Set reserved_host_memory_mb to what you need.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":38,"context_line":"* There must be enough RAM"},{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_882c8b03","line":41,"in_reply_to":"1a122d0e_4e5e1713","updated":"2016-05-09 14:24:35.000000000","message":"its not a per host thing, its a cross multiple hosts thing, I could expand this more to disucss why, but its not really that relavant.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_ae9b6bc8","line":42,"updated":"2016-04-24 16:33:45.000000000","message":"This is a placement strategy of spread vs. pack. Unfortunately, we\u0027ve muddied this in the Nova scheduler configuration options by referring to crap like \"multipliers\" and setting negative \"weight\" options. I\u0027m supportive of cleaning up all those configuration options to something more human-friendly, like \"placement_strategy\u003d[pack|spread|random]\" or whatever...","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"4da9c7caea63dc4fb12e00c1f366669d4b55427f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_ceb347e8","line":42,"in_reply_to":"1a122d0e_ae9b6bc8","updated":"2016-04-24 17:18:19.000000000","message":"+1. Having the same algorithms used for both a packing and spread strategy is a pain. Its likely that the best algorithm for these two cases is very different. Its likely that the type of deployment that wishes to use these two strategies is very different. They should be separated.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* Must keep two hosts empty (to allow for live-migrate maintenance)"},{"line_number":40,"context_line":"* Ideally no Windows and Linux boxes on the same host (save on license costs)"},{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_e8d717bd","line":42,"in_reply_to":"1a122d0e_ceb347e8","updated":"2016-05-09 14:24:35.000000000","message":"Again, this is a nonsense example without extra context, I should be more clear on these.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"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":6,"id":"1a122d0e_8e9e6fb6","line":44,"updated":"2016-04-24 16:33:45.000000000","message":"Can we just call them what they are: requirements and preferences? There is no such thing as a \"soft requirement\". That term is an oxymoron.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":41,"context_line":"* Try to keep 10% of free space for the largest flavor"},{"line_number":42,"context_line":"* Try to minimize the number of servers on each host (reduce contention)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that top two are hard requirements and the others are soft requirements."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"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":6,"id":"dab17558_48fe2338","line":44,"in_reply_to":"1a122d0e_8e9e6fb6","updated":"2016-05-09 14:24:35.000000000","message":"Sure.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"51108ba1db494b4c61ca3e7426105bab386e6449","unresolved":false,"context_lines":[{"line_number":63,"context_line":"At some point, you switch from hard requirements to soft requirements."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"This leaves us with a ordered list of soft requirements, and an order list of"},{"line_number":66,"context_line":"hard requirements."},{"line_number":67,"context_line":"The order of the hard requirements will be to rule out as many hosts as"},{"line_number":68,"context_line":"possible as quickly as possible, to improve the efficiency of the tests."},{"line_number":69,"context_line":"For the soft requirements, you need to see what tests all the remaining hosts"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_6eb4abf1","line":66,"updated":"2016-01-20 21:38:32.000000000","message":"note: some operator see some requirements as being hard or soft, depending on their deploment vs. needs which means that we can possibly see an hard requirement being a soft one by configuring it","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dc35633febbd964fbb020e3777086e777b6c75d4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"For the soft requirements, you need to see what tests all the remaining hosts"},{"line_number":70,"context_line":"pass. To compare what is a better fit, we can use the ordered list of soft"},{"line_number":71,"context_line":"requirements to generate a bit field, and you can sort the list using the"},{"line_number":72,"context_line":"number generated from the bit field."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For example, consider filters A, B, C that are soft requirements. They are"},{"line_number":75,"context_line":"listed in their order of preference, i.e. A is the most important test,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_eea56304","line":72,"updated":"2016-04-24 16:33:45.000000000","message":"You say \"the bit field\" above, but have not yet introduced the concept of using a bit field for this ordering/ranking, which makes the paragraph read like it\u0027s out of order with something.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"51108ba1db494b4c61ca3e7426105bab386e6449","unresolved":false,"context_lines":[{"line_number":71,"context_line":"requirements to generate a bit field, and you can sort the list using the"},{"line_number":72,"context_line":"number generated from the bit field."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"For example, consider filters A, B, C that are soft requirements. They are"},{"line_number":75,"context_line":"listed in their order of preference, i.e. A is the most important test,"},{"line_number":76,"context_line":"followed by B, then C. Now consider the following results:"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_6efeeb6c","line":74,"range":{"start_line":74,"start_character":46,"end_line":74,"end_character":52},"updated":"2016-01-20 21:38:32.000000000","message":"we should avoid \u0027soft\u0027 to be mentioned. Instead, we consider that operator wants to check against A, B and C, A being the more important check.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"c4b4add65a55f4d5420731e5c34b0fafc6bc3f74","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"* host1 \u003d A: pass, B: fail, C: fail (i.e. 100 \u003d 4)"},{"line_number":79,"context_line":"* host2 \u003d A: pass, B: pass, C: pass (i.e. 111 \u003d 7)"},{"line_number":80,"context_line":"* host3 \u003d A: fail, B: pass, C: pass (i.e. 011 \u003d 3)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"That gives us the following preference order: host2, host1, host3."},{"line_number":83,"context_line":"Note that if a host passes the A test, it is always preferred over anything"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_a526eeb7","line":80,"updated":"2016-04-24 11:47:03.000000000","message":"This is clearly a massive change to the weighting/placement algorithm. I think in general the idea is a good one. The current weights system is extremely fiddly. (To properly optimize you need to change the relative importance of all the weighers as well as the host subset size, which is basically a mystery variable)","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"51108ba1db494b4c61ca3e7426105bab386e6449","unresolved":false,"context_lines":[{"line_number":95,"context_line":"hard requirements, so in this case only host10 would then have all the soft"},{"line_number":96,"context_line":"requirements tested. Also note, that the most important hard tests, X, is"},{"line_number":97,"context_line":"picked purely as it quickly rules out the largest number of hosts. In a cloud"},{"line_number":98,"context_line":"with little free space, this could be the \"Is there enough RAM?\" test."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"We should now consider the case where the user wants to minimize the number of"},{"line_number":101,"context_line":"servers on each host. With the older scheduler, this would be a weigher, and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_4e73e7e7","line":98,"updated":"2016-01-20 21:38:32.000000000","message":"well, I don\u0027t really see a difference with the logic above, except that the loop over all the filters should break when a filter returns something saying \u0027meh, not cool\u0027 instead of \u0027cool\u0027","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18749,"name":"Deepak Mohan","email":"deepak.mohan@rackspace.com","username":"dpk"},"change_message_id":"2312ac83384db59ab1754fc9754d84fc8ae348ad","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* debugging is easier, as its clear which tests passed vs failed, rather"},{"line_number":120,"context_line":"  trying to work out what bits of weights came from all the different"},{"line_number":121,"context_line":"  components."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Alternatives"},{"line_number":124,"context_line":"------------"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a710552_94e82ae4","line":122,"updated":"2015-12-15 17:47:26.000000000","message":"Two other benefits\n- this results in more deterministic behaviour for VM placement.\n- operators can change the order of soft filters when needed, to meet specific operational needs.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7b94e73f8a4ff0f5218ca30e675bcf9401be8fd7","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* debugging is easier, as its clear which tests passed vs failed, rather"},{"line_number":120,"context_line":"  trying to work out what bits of weights came from all the different"},{"line_number":121,"context_line":"  components."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Alternatives"},{"line_number":124,"context_line":"------------"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_17272565","line":122,"in_reply_to":"5a710552_94e82ae4","updated":"2015-12-18 10:50:07.000000000","message":"Totally agreed with the last one, I can add that in a follow up patch.\n\nI guess the first one is also true, but I prefer saying \"debugging is easier\". Not really sure why.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"c4b4add65a55f4d5420731e5c34b0fafc6bc3f74","unresolved":false,"context_lines":[{"line_number":132,"context_line":"There are proposals for different normalizations that better preserve the"},{"line_number":133,"context_line":"relative magnitude (assuming the weights are either all positive or all"},{"line_number":134,"context_line":"negative), but there is still a lot of interplay between the different"},{"line_number":135,"context_line":"weighers that can be hard to fully understand."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"A possible extension of this scheduler, so it is more expressive, is to have"},{"line_number":138,"context_line":"ways for flavor extra_specs to influence the preference order. You could"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_821be87f","line":135,"updated":"2016-04-24 11:47:03.000000000","message":"I don\u0027t know the history of the weight normalization, but it seems to have been done in a sensible(ish) way.\n\nI think more can be done with the current system to improve normalization of the variables. I\u0027m not sure that doing this to the current system will make the weights as easy to understand as the system proposed, but could provide some improvements.\n\nOne idea would be to not perform normalization to a (0-1) scale but to scale based on the resources used by the instance.\n\nExample: We are scheduling an instance for a flavor with 2cpu 4Gb ram and 200Gb disk. The 2 hosts have free:\n\nHost1: 1000Gb disk, 4cpu, 8Gb ram \nHost2: 400Gb disk, 2cpu, 16Gb ram\n\nSo take the free and divide by the flavor amount:\n\nHost1: 5disk, 2cpu, 2ram\nHost2: 2disk, 1cpu, 4ram\n\nThese weights now represent \"how many of this instance can I fit on the host for this resource\". Instead of normalizing to (0-1) for all weights, weights are now normalized to \"number of instances that fit\". This would do away with the need for the relative weights configuration options. (Which are a pain). It would make the weigher somewhat easier to understand as \"how many instances\" has some meaning.\n\nI\u0027m currently writing a spec and PoC for this. Will update comment with link when finished.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"c4b4add65a55f4d5420731e5c34b0fafc6bc3f74","unresolved":false,"context_lines":[{"line_number":137,"context_line":"A possible extension of this scheduler, so it is more expressive, is to have"},{"line_number":138,"context_line":"ways for flavor extra_specs to influence the preference order. You could"},{"line_number":139,"context_line":"configure a default preference ordering, and some named preferences orders"},{"line_number":140,"context_line":"and reference those in the flavor."},{"line_number":141,"context_line":"For simplicity, this has been excluded from this backlog specification."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"We could consider reversing this idea, and only having weighers. For hard"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_0208782c","line":140,"updated":"2016-04-24 11:47:03.000000000","message":"This seems useful outside of this spec. Flavors being able to change what flavors are used.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"4da9c7caea63dc4fb12e00c1f366669d4b55427f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"A possible extension of this scheduler, so it is more expressive, is to have"},{"line_number":138,"context_line":"ways for flavor extra_specs to influence the preference order. You could"},{"line_number":139,"context_line":"configure a default preference ordering, and some named preferences orders"},{"line_number":140,"context_line":"and reference those in the flavor."},{"line_number":141,"context_line":"For simplicity, this has been excluded from this backlog specification."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"We could consider reversing this idea, and only having weighers. For hard"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_0e9fff50","line":140,"in_reply_to":"1a122d0e_0208782c","updated":"2016-04-24 17:18:19.000000000","message":"*Ahem* Flavors being able to change what filters / weighers are used.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"c4b4add65a55f4d5420731e5c34b0fafc6bc3f74","unresolved":false,"context_lines":[{"line_number":143,"context_line":"We could consider reversing this idea, and only having weighers. For hard"},{"line_number":144,"context_line":"requirements, you could consider a weight \u003e0 as a pass (or similar)."},{"line_number":145,"context_line":"But consider the following (where A, B, C is a set of ordered weighers with"},{"line_number":146,"context_line":"normalised weight values):"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"* host4 \u003d A: 1.0 x 100, B: 0.0 x 10, C: 0.0 (i.e. 100)"},{"line_number":149,"context_line":"* host5 \u003d A: 0.1 x 100, B: 0.0 x 10, C: 0.0 (i.e. 010)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_458c3a7f","line":146,"updated":"2016-04-24 11:47:03.000000000","message":"This essentially combines the weighers with the hard filters.\n\nIn a very large system i\u0027m not sure that we need the hard filters at all for the resources based components. The hard filters are required for aggregates and other things that we don\u0027t have weighers for. (NUMA, PCI).\n\nFor ram, cpu, disk the weighers are possibly sufficient. As the host list is sorted and the top N hosts are selected from, one would hope that all hosts that would have failed these hard filters are somewhere very low in the list and have no chance of being chosen anyway.\n\nIn  the case of the probabilistic placement algorithm I\u0027m proposing https://review.openstack.org/#/c/293139/) Its possible to choose from all hosts, but those low on the list would have a very low probability of being chosen. A very low probability for hosts that would have failed the hard filters sounds like a bad idea, until you realize that the nature of a distributed scheduler is that we are operating of imperfect information. Ruling out a host because it doesn\u0027t have enough ram in your world view might be bad as, in-reality, this host is now capable of dealing with the instance. (Due to changes that have not been propagated yet)","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"c4b4add65a55f4d5420731e5c34b0fafc6bc3f74","unresolved":false,"context_lines":[{"line_number":181,"context_line":"Performance Impact"},{"line_number":182,"context_line":"------------------"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Unknown"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Other deployer impact"},{"line_number":187,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_654cd670","line":184,"updated":"2016-04-24 11:47:03.000000000","message":"This section needs to be bigger. :)\nWhat do you expect the performance impact to be? Even without doing any tests I would like to see some guesses based on how the algorithm has been (vastly) changed from the old one.\n\nWhat could the effect be on packing efficiency? What could the effect be on placement failure rates. (Especially in a multi-scheduler environment)\n\nFor N weighers (W1, W2... Wn) we took a weight normalized to 0-1 and did\nSum(Wn), and ordered from there. (Assuming the relative weights of each weigher was 1). For the basic weighers (ram, disk, cpu) this seems like it will deal with packing efficiency moderately well as it treats them all with the same importance, and that importance is infinitely adjustable. (With great difficulty in determining a sensible value for the adjustment)\n\nWould the proposed algorithm have difficulties here? The bit-field idea essentially forces us to have each weight 2x as important as any other.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f8918e6d18d925f3cfe51ba4e28c29e15e41dce","unresolved":false,"context_lines":[{"line_number":181,"context_line":"Performance Impact"},{"line_number":182,"context_line":"------------------"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Unknown"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Other deployer impact"},{"line_number":187,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dab17558_cb420d10","line":184,"in_reply_to":"1a122d0e_654cd670","updated":"2016-05-09 14:24:35.000000000","message":"In terms of compute complexity, it seems largely identical.\n\n* You rule out most hosts with the most likely to exclude filters first\n* do a small calculation for each remaining host, and some simple arithmetic to combine the results\n\nIt terms of accuracy of the decision, its using the same cached data, and very similar calculations.\n\nI am not really sure I understand your questions here, but I can add more details now I have a prototype.","commit_id":"5a57ada23633bafe2be3e7085a463f05df0216f2"}],"specs/newton/approved/ordered-filter-scheduler.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a6b228fecd916d5f602b45e27ea14d561909fe20","unresolved":false,"context_lines":[{"line_number":39,"context_line":"are both just preferences, there is likely a preference order. For example,"},{"line_number":40,"context_line":"if you say you prefer test A to pass, rather than test B, then"},{"line_number":41,"context_line":"any host where test A passes should beat a host where test A fails,"},{"line_number":42,"context_line":"independent of the fast test B might pass."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Use Cases"},{"line_number":45,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_a34692bd","line":42,"range":{"start_line":42,"start_character":19,"end_line":42,"end_character":23},"updated":"2016-05-16 14:23:23.000000000","message":"fact","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"any host that does not pass that test, regardless of the result of any other"},{"line_number":69,"context_line":"test. When using weighers and multipliers it becomes much harder to reason"},{"line_number":70,"context_line":"about because 0.1*100 + 0.1*10 \u003d 0.01*100 + 1*10"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Proposed change"},{"line_number":73,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_3d5d14ed","line":71,"updated":"2016-05-24 14:27:42.000000000","message":"The other usecase I can see when discussing with operators is our server groups affinity concepts.\n\nMost of the time, they want to enforce a strict anti-affinity policy for obvious reasons, but they don\u0027t want an instance creation to fail if there are not enough hosts. I agree with the fact the logic can be a bit weird, but I could paraphrase that as :\n\"as an admin, I want to strictly prefer to enforce my policies unless there are not enough hosts\"","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":68,"context_line":"any host that does not pass that test, regardless of the result of any other"},{"line_number":69,"context_line":"test. When using weighers and multipliers it becomes much harder to reason"},{"line_number":70,"context_line":"about because 0.1*100 + 0.1*10 \u003d 0.01*100 + 1*10"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Proposed change"},{"line_number":73,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_aa5275db","line":71,"in_reply_to":"bab6814e_3d5d14ed","updated":"2016-05-27 13:03:05.000000000","message":"Well I actually think that one breaks the API. There was talk of adding \"soft\" affinity so users can choose what happens.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"The first change is to add a new configuration value \"scheduler_soft_filters\","},{"line_number":85,"context_line":"an ordered list of filters, most preferred first, representing your"},{"line_number":86,"context_line":"preferences in your order of preference. It is in the same format as the"},{"line_number":87,"context_line":"existing scheduler_default_filters configuration."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note, some of these filters may have extra configuration parameters such as"},{"line_number":90,"context_line":"\"stack\" and \"spread\", but this is out of scope for this specification, and"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_dd45e8b3","line":87,"range":{"start_line":87,"start_character":9,"end_line":87,"end_character":34},"updated":"2016-05-24 14:27:42.000000000","message":"FWIW, I don\u0027t really like the name of that config opt, which is not the default list of filters, but rather the list of running filters... Probably renaming that one when you\u0027re adding the new above opt could help clarifying the situation, and not confuse operators who would wonder what the difference is.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":84,"context_line":"The first change is to add a new configuration value \"scheduler_soft_filters\","},{"line_number":85,"context_line":"an ordered list of filters, most preferred first, representing your"},{"line_number":86,"context_line":"preferences in your order of preference. It is in the same format as the"},{"line_number":87,"context_line":"existing scheduler_default_filters configuration."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note, some of these filters may have extra configuration parameters such as"},{"line_number":90,"context_line":"\"stack\" and \"spread\", but this is out of scope for this specification, and"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_4a5829fb","line":87,"range":{"start_line":87,"start_character":9,"end_line":87,"end_character":34},"in_reply_to":"bab6814e_dd45e8b3","updated":"2016-05-27 13:03:05.000000000","message":"ack, that name is out of date now.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note, some of these filters may have extra configuration parameters such as"},{"line_number":90,"context_line":"\"stack\" and \"spread\", but this is out of scope for this specification, and"},{"line_number":91,"context_line":"will be covered in a follow up specification."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Filter Scheduler Changes"},{"line_number":94,"context_line":"------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_fd76ec04","line":91,"updated":"2016-05-24 14:27:42.000000000","message":"which means then that you don\u0027t plan to deprecate weighers, right?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note, some of these filters may have extra configuration parameters such as"},{"line_number":90,"context_line":"\"stack\" and \"spread\", but this is out of scope for this specification, and"},{"line_number":91,"context_line":"will be covered in a follow up specification."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Filter Scheduler Changes"},{"line_number":94,"context_line":"------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_ea091ddf","line":91,"in_reply_to":"bab6814e_fd76ec04","updated":"2016-05-27 13:03:05.000000000","message":"Not initially. Well we could, I just want to prove we can get rid of them.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The changes are mostly reserved to HostManager.get_weighed_hosts(), i.e."},{"line_number":97,"context_line":"it does not affect how requirements are checked, it only changes how the"},{"line_number":98,"context_line":"preference order of the remaining hosts is calculated."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"First we go through every filter, and determine if each host passes or"},{"line_number":101,"context_line":"fails each of the filters in scheduler_soft_filters list. This can be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_78084a29","line":98,"updated":"2016-05-24 14:27:42.000000000","message":"so does it means we still iterate over scheduler_default_filters whether scheduler_soft_filters is set or None ?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The changes are mostly reserved to HostManager.get_weighed_hosts(), i.e."},{"line_number":97,"context_line":"it does not affect how requirements are checked, it only changes how the"},{"line_number":98,"context_line":"preference order of the remaining hosts is calculated."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"First we go through every filter, and determine if each host passes or"},{"line_number":101,"context_line":"fails each of the filters in scheduler_soft_filters list. This can be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_2ae20504","line":98,"in_reply_to":"bab6814e_78084a29","updated":"2016-05-27 13:03:05.000000000","message":"See the prototype code for details.\n\nIterating over an empty list is really cheap, but basically things are the same.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"it does not affect how requirements are checked, it only changes how the"},{"line_number":98,"context_line":"preference order of the remaining hosts is calculated."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"First we go through every filter, and determine if each host passes or"},{"line_number":101,"context_line":"fails each of the filters in scheduler_soft_filters list. This can be"},{"line_number":102,"context_line":"used to create a integer for each host, that represents a bit field."},{"line_number":103,"context_line":"For example, if scheduler_soft_filters\u003dA,B,C and a host result is"},{"line_number":104,"context_line":"pass A, fail B, pass C, the integer is 5, i.e. 101 in binary. The list"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_78a4ca07","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":57},"updated":"2016-05-24 14:27:42.000000000","message":"I\u0027m confused, does that mean we\u0027re looping over the hosts a second time (with a smaller subset, I reckon) ?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":97,"context_line":"it does not affect how requirements are checked, it only changes how the"},{"line_number":98,"context_line":"preference order of the remaining hosts is calculated."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"First we go through every filter, and determine if each host passes or"},{"line_number":101,"context_line":"fails each of the filters in scheduler_soft_filters list. This can be"},{"line_number":102,"context_line":"used to create a integer for each host, that represents a bit field."},{"line_number":103,"context_line":"For example, if scheduler_soft_filters\u003dA,B,C and a host result is"},{"line_number":104,"context_line":"pass A, fail B, pass C, the integer is 5, i.e. 101 in binary. The list"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_2ab965ea","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":57},"in_reply_to":"bab6814e_78a4ca07","updated":"2016-05-27 13:03:05.000000000","message":"Lets be clear, its just a second loop, there is no duplicate work here.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"pass A, fail B, pass C, the integer is 5, i.e. 101 in binary. The list"},{"line_number":105,"context_line":"is then sorted as normal, to get the final preference order."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"For backwards compatibility reasons, before sorting the list, if we have"},{"line_number":108,"context_line":"and weighers still configured, we need to take those into account."},{"line_number":109,"context_line":"First we do the same calculation that is done today to get a weight for"},{"line_number":110,"context_line":"each host. We then need to combine this with the above integers such that"},{"line_number":111,"context_line":"and preference filter passing beats any weigher, i.e. the weights are only"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_3dbb5477","line":108,"range":{"start_line":107,"start_character":62,"end_line":108,"end_character":13},"updated":"2016-05-24 14:27:42.000000000","message":"\"If we have and weighters\" ????\nsome word is missing (I suppose \"filters\") or is \"and\" too much ?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":104,"context_line":"pass A, fail B, pass C, the integer is 5, i.e. 101 in binary. The list"},{"line_number":105,"context_line":"is then sorted as normal, to get the final preference order."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"For backwards compatibility reasons, before sorting the list, if we have"},{"line_number":108,"context_line":"and weighers still configured, we need to take those into account."},{"line_number":109,"context_line":"First we do the same calculation that is done today to get a weight for"},{"line_number":110,"context_line":"each host. We then need to combine this with the above integers such that"},{"line_number":111,"context_line":"and preference filter passing beats any weigher, i.e. the weights are only"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_cac89977","line":108,"range":{"start_line":107,"start_character":62,"end_line":108,"end_character":13},"in_reply_to":"bab6814e_3dbb5477","updated":"2016-05-27 13:03:05.000000000","message":"I think I should just drop the and.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"383ee99ba35c8039049fbd1a957b4ad818f1bffd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"* debugging is easier, as its clear which tests passed vs failed, rather"},{"line_number":124,"context_line":"  trying to work out what bits of weights came from all the different"},{"line_number":125,"context_line":"  components."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Alternatives"},{"line_number":128,"context_line":"------------"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_b81f5208","line":126,"updated":"2016-05-24 14:27:42.000000000","message":"I\u0027m actually wondering why we couldn\u0027t make scheduler_default_filters being deprecated, use scheduler_filters instead and just add a new conf opt like scheduler_filters_behaviour\u003d[soft, hard]\" where \u0027hard\u0027 would keep the backwards-compatible behaviour ?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e669068f652ad74a4abf71cbd44b09510b8daec0","unresolved":false,"context_lines":[{"line_number":123,"context_line":"* debugging is easier, as its clear which tests passed vs failed, rather"},{"line_number":124,"context_line":"  trying to work out what bits of weights came from all the different"},{"line_number":125,"context_line":"  components."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Alternatives"},{"line_number":128,"context_line":"------------"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_fe6423e6","line":126,"in_reply_to":"bab6814e_b81f5208","updated":"2016-05-24 14:37:24.000000000","message":"Thinking more of the problem, I can see why it could still be necessary to have a list of hard constraints to enforce (and not just a flag for enforcing that).\n\nI need to pause on that and draft something.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":123,"context_line":"* debugging is easier, as its clear which tests passed vs failed, rather"},{"line_number":124,"context_line":"  trying to work out what bits of weights came from all the different"},{"line_number":125,"context_line":"  components."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Alternatives"},{"line_number":128,"context_line":"------------"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_6a79ad2f","line":126,"in_reply_to":"bab6814e_fe6423e6","updated":"2016-05-27 13:03:05.000000000","message":"Yeah, we need both lists.\n\nWe should really just rename the old config, lets me think on that.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"39289cb9962fae07e87c3dcb133e7a085fd18fdb","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Existing filters and weights configurations continue to work after the"},{"line_number":189,"context_line":"proposed modifications have been made."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"If a deployer chooses to use only scheduler_soft_filters and"},{"line_number":192,"context_line":"scheduler_soft_filters, it will be much easier to predict what the"},{"line_number":193,"context_line":"scheduler will decide on each API request."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bab6814e_017bbf7b","line":192,"range":{"start_line":191,"start_character":34,"end_line":192,"end_character":22},"updated":"2016-05-23 17:53:13.000000000","message":"typo?","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"565b9a3242aa975fb2e6e8f273017b0d82da1406","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Existing filters and weights configurations continue to work after the"},{"line_number":189,"context_line":"proposed modifications have been made."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"If a deployer chooses to use only scheduler_soft_filters and"},{"line_number":192,"context_line":"scheduler_soft_filters, it will be much easier to predict what the"},{"line_number":193,"context_line":"scheduler will decide on each API request."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9abb7d3a_caad398a","line":192,"range":{"start_line":191,"start_character":34,"end_line":192,"end_character":22},"in_reply_to":"bab6814e_017bbf7b","updated":"2016-05-27 13:03:05.000000000","message":"oops, yeah, must be. I mean hard for one of those.","commit_id":"6522191192341de663bb8b154d8d65cd234c7b42"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"88aeb90618e2bc783567fead1fe47b4251cb9584","unresolved":false,"context_lines":[{"line_number":82,"context_line":"---------------------"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Rename the existing list of filters, scheduler_default_filters to:"},{"line_number":85,"context_line":"scheduler_filters_requirements"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Add a new list of filters called:"},{"line_number":88,"context_line":"scheduler_filters_preferences"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_eeccf0bc","line":85,"updated":"2016-06-08 08:21:23.000000000","message":"From an operator perspective, I would prefer \"hard\" here...","commit_id":"9fad6721e767f7d52fc87caa28c22b142eaafe90"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"88aeb90618e2bc783567fead1fe47b4251cb9584","unresolved":false,"context_lines":[{"line_number":85,"context_line":"scheduler_filters_requirements"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Add a new list of filters called:"},{"line_number":88,"context_line":"scheduler_filters_preferences"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"For a host to be considered, it must pass all the filters in"},{"line_number":91,"context_line":"scheduler_filters_requirements. As such, that list is ordered with"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_2ec9d859","line":88,"updated":"2016-06-08 08:21:23.000000000","message":"... and soft here.","commit_id":"9fad6721e767f7d52fc87caa28c22b142eaafe90"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"88aeb90618e2bc783567fead1fe47b4251cb9584","unresolved":false,"context_lines":[{"line_number":104,"context_line":"an equal preference rating, as defined by the scheduler_filters_preferences,"},{"line_number":105,"context_line":"then it uses the existing weights system to decide the preference order"},{"line_number":106,"context_line":"between those hosts. Note this means the result of the order defined by the"},{"line_number":107,"context_line":"scheduler_filters_preferences always dominates and result from the weights."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Filter Scheduler Changes"},{"line_number":110,"context_line":"------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_b09886c1","line":107,"updated":"2016-06-08 08:21:23.000000000","message":"So, we will still have the weights in place for the cases were the hosts have an even score with regards the preferences, right?","commit_id":"9fad6721e767f7d52fc87caa28c22b142eaafe90"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"622a443e73c58ea7bff406e73baa0520efce520c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Now with this smaller list of hosts, for each host, we check if it passes"},{"line_number":120,"context_line":"or fails the filters in the scheduler_filters_preferences list."},{"line_number":121,"context_line":"The result of this check is used to calculate an integer for each host,"},{"line_number":122,"context_line":"that represents a bit field of the result."},{"line_number":123,"context_line":"For example, if scheduler_soft_filters\u003dA,B,C and a host result is"},{"line_number":124,"context_line":"pass A, fail B, pass C, the integer is 5, i.e. 101 in binary."},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"9abb7d3a_a8d214fe","line":122,"updated":"2016-05-31 08:58:22.000000000","message":"Okay thanks, that\u0027s far more clearer for me.","commit_id":"9fad6721e767f7d52fc87caa28c22b142eaafe90"}]}
