)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-01-03 20:18:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Per aggregate scheduling weight"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I6e15c6507d037ffe263a460441858ed454b02504"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ffd0ebdf_1273a1e9","line":8,"updated":"2019-01-03 14:44:06.000000000","message":"Remember to link the blueprint in here.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-01-03 20:18:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Per aggregate scheduling weight"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I6e15c6507d037ffe263a460441858ed454b02504"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ffd0ebdf_6ad9c681","line":8,"in_reply_to":"ffd0ebdf_1273a1e9","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e5ca3494617cb728657de041b1011a0f46016f9c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Per aggregate scheduling weight"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes to add ability to allow users to use"},{"line_number":10,"context_line":"``Aggregate``\u0027s ``metadata`` to override the global config options"},{"line_number":11,"context_line":"for weights to achieve more fine-grained control over resource"},{"line_number":12,"context_line":"weights."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dfd5e7cf_c9e69ae9","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":9},"updated":"2019-01-09 10:09:44.000000000","message":"this is a patchset that impement a blueprint/spec but it is not a spec.\n\ni would reword this as \"This patch ...\" where ... expleians the set of changes you made and why.\nhttps://wiki.openstack.org/wiki/GitCommitMessages provides guidance on that topic.","commit_id":"4e1f6b1c1a15fd6aa31d8100626d771563a06b3d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Per aggregate scheduling weight"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes to add ability to allow users to use"},{"line_number":10,"context_line":"``Aggregate``\u0027s ``metadata`` to override the global config options"},{"line_number":11,"context_line":"for weights to achieve more fine-grained control over resource"},{"line_number":12,"context_line":"weights."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dfd5e7cf_55231706","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":9},"in_reply_to":"dfd5e7cf_c9e69ae9","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"4e1f6b1c1a15fd6aa31d8100626d771563a06b3d"}],"doc/source/admin/configuration/schedulers.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5be548560eccb6871ba8d9def0f1d64dc12a8412","unresolved":false,"context_lines":[{"line_number":850,"context_line":"       Set the ``ram_weight_multiplier`` option to a negative number if you"},{"line_number":851,"context_line":"       prefer stacking instead of spreading. Use a floating-point value."},{"line_number":852,"context_line":"       If the per aggregate ``ram_weight_multiplier``"},{"line_number":853,"context_line":"       metadata is set, this multiplier will be overwrite."},{"line_number":854,"context_line":"   * - [DEFAULT]"},{"line_number":855,"context_line":"     - ``disk_weight_multiplier``"},{"line_number":856,"context_line":"     - By default, the scheduler spreads instances across all hosts evenly."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_62a9e279","line":853,"range":{"start_line":853,"start_character":45,"end_line":853,"end_character":57},"updated":"2019-01-04 16:11:05.000000000","message":"override the configuration option value.\n\n(here and below)","commit_id":"ad0cfcf225ed21063aa59e483ba76bfabfdf8124"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":850,"context_line":"       Set the ``ram_weight_multiplier`` option to a negative number if you"},{"line_number":851,"context_line":"       prefer stacking instead of spreading. Use a floating-point value."},{"line_number":852,"context_line":"       If the per aggregate ``ram_weight_multiplier``"},{"line_number":853,"context_line":"       metadata is set, this multiplier will be overwrite."},{"line_number":854,"context_line":"   * - [DEFAULT]"},{"line_number":855,"context_line":"     - ``disk_weight_multiplier``"},{"line_number":856,"context_line":"     - By default, the scheduler spreads instances across all hosts evenly."}],"source_content_type":"text/x-rst","patch_set":4,"id":"dfd5e7cf_1f9f2651","line":853,"range":{"start_line":853,"start_character":45,"end_line":853,"end_character":57},"in_reply_to":"ffd0ebdf_62a9e279","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"ad0cfcf225ed21063aa59e483ba76bfabfdf8124"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":909,"context_line":"       If the per aggregate ``build_failure_weight_multiplier``"},{"line_number":910,"context_line":"       metadata is set, this multiplier will override the configuration option"},{"line_number":911,"context_line":"       value."},{"line_number":912,"context_line":"   * - [metrics]"},{"line_number":913,"context_line":"     - ``weight_multiplier``"},{"line_number":914,"context_line":"     - Multiplier for weighting meters. Use a floating-point value."},{"line_number":915,"context_line":"   * - [metrics]"},{"line_number":916,"context_line":"     - ``weight_setting``"},{"line_number":917,"context_line":"     - Determines how meters are weighted. Use a comma-separated list of"},{"line_number":918,"context_line":"       metricName\u003dratio. For example: ``name1\u003d1.0, name2\u003d-1.0`` results in:"},{"line_number":919,"context_line":"       ``name1.value * 1.0 + name2.value * -1.0``"},{"line_number":920,"context_line":"   * - [metrics]"},{"line_number":921,"context_line":"     - ``required``"},{"line_number":922,"context_line":"     - Specifies how to treat unavailable meters:"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"       * True - Raises an exception. To avoid the raised exception, you should"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_1af06a67","line":921,"range":{"start_line":912,"start_character":7,"end_line":921,"end_character":19},"updated":"2019-01-09 03:28:15.000000000","message":"I guess you missed this one?","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":909,"context_line":"       If the per aggregate ``build_failure_weight_multiplier``"},{"line_number":910,"context_line":"       metadata is set, this multiplier will override the configuration option"},{"line_number":911,"context_line":"       value."},{"line_number":912,"context_line":"   * - [metrics]"},{"line_number":913,"context_line":"     - ``weight_multiplier``"},{"line_number":914,"context_line":"     - Multiplier for weighting meters. Use a floating-point value."},{"line_number":915,"context_line":"   * - [metrics]"},{"line_number":916,"context_line":"     - ``weight_setting``"},{"line_number":917,"context_line":"     - Determines how meters are weighted. Use a comma-separated list of"},{"line_number":918,"context_line":"       metricName\u003dratio. For example: ``name1\u003d1.0, name2\u003d-1.0`` results in:"},{"line_number":919,"context_line":"       ``name1.value * 1.0 + name2.value * -1.0``"},{"line_number":920,"context_line":"   * - [metrics]"},{"line_number":921,"context_line":"     - ``required``"},{"line_number":922,"context_line":"     - Specifies how to treat unavailable meters:"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"       * True - Raises an exception. To avoid the raised exception, you should"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_f3603135","line":921,"range":{"start_line":912,"start_character":7,"end_line":921,"end_character":19},"in_reply_to":"dfd5e7cf_1af06a67","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":".. _host-aggregates:"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"Host aggregates and availability zones"},{"line_number":1007,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"Host aggregates are a mechanism for partitioning hosts in an OpenStack cloud,"},{"line_number":1010,"context_line":"or a region of an OpenStack cloud, based on arbitrary characteristics."},{"line_number":1011,"context_line":"Examples where an administrator may want to do this include where a group of"},{"line_number":1012,"context_line":"hosts have additional hardware or performance characteristics."},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":"Host aggregates are not explicitly exposed to users.  Instead administrators"},{"line_number":1015,"context_line":"map flavors to host aggregates.  Administrators do this by setting metadata on"},{"line_number":1016,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1017,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1018,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1019,"context_line":"in more than one host aggregate."},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1022,"context_line":"availability zone. Availability zones are different from host aggregates in"},{"line_number":1023,"context_line":"that they are explicitly exposed to the user, and hosts can only be in a single"},{"line_number":1024,"context_line":"availability zone. Administrators can configure a default availability zone"},{"line_number":1025,"context_line":"where instances will be scheduled when the user fails to specify one."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Command-line interface"},{"line_number":1028,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_dad0a2cc","line":1025,"range":{"start_line":1006,"start_character":0,"end_line":1025,"end_character":69},"updated":"2019-01-09 03:28:15.000000000","message":"could it be better to mention something about the new possible aggregate key-values in this section?","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":".. _host-aggregates:"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"Host aggregates and availability zones"},{"line_number":1007,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"Host aggregates are a mechanism for partitioning hosts in an OpenStack cloud,"},{"line_number":1010,"context_line":"or a region of an OpenStack cloud, based on arbitrary characteristics."},{"line_number":1011,"context_line":"Examples where an administrator may want to do this include where a group of"},{"line_number":1012,"context_line":"hosts have additional hardware or performance characteristics."},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":"Host aggregates are not explicitly exposed to users.  Instead administrators"},{"line_number":1015,"context_line":"map flavors to host aggregates.  Administrators do this by setting metadata on"},{"line_number":1016,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1017,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1018,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1019,"context_line":"in more than one host aggregate."},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1022,"context_line":"availability zone. Availability zones are different from host aggregates in"},{"line_number":1023,"context_line":"that they are explicitly exposed to the user, and hosts can only be in a single"},{"line_number":1024,"context_line":"availability zone. Administrators can configure a default availability zone"},{"line_number":1025,"context_line":"where instances will be scheduled when the user fails to specify one."},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"Command-line interface"},{"line_number":1028,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_f3eef186","line":1025,"range":{"start_line":1006,"start_character":0,"end_line":1025,"end_character":69},"in_reply_to":"dfd5e7cf_dad0a2cc","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d3ec6425a609e3c6584f46ee5afa3f5bdb08e243","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1020,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1021,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1022,"context_line":"in more than one host aggregate. Administrators can also control the weight"},{"line_number":1023,"context_line":"value by setting the ``xxx_weight_multiplier`` aggregate metadata."},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1026,"context_line":"availability zone. Availability zones are different from host aggregates in"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dfd5e7cf_56ea2fac","line":1023,"range":{"start_line":1022,"start_character":34,"end_line":1023,"end_character":66},"updated":"2019-01-10 11:17:52.000000000","message":"I suggest to mention all the valid weight multiplier here rather than just xxx, but lets see what others think.","commit_id":"f4f860b9937bd3af97e5ac0af40e6b71bc4bb2d6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"83337e2ab362b879bb6d078be0f4e3b27644d8e5","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1020,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1021,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1022,"context_line":"in more than one host aggregate. Administrators can also control the weight"},{"line_number":1023,"context_line":"value by setting the ``xxx_weight_multiplier`` aggregate metadata."},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1026,"context_line":"availability zone. Availability zones are different from host aggregates in"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfdaf3ff_8a519f11","line":1023,"range":{"start_line":1022,"start_character":34,"end_line":1023,"end_character":66},"in_reply_to":"dfd5e7cf_56ea2fac","updated":"2019-01-11 08:36:51.000000000","message":"I thought we already had the detail description about how to use xxx_weight_multiplier above. So, I just use the xxx_weight_multiplier in here","commit_id":"f4f860b9937bd3af97e5ac0af40e6b71bc4bb2d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":831,"context_line":""},{"line_number":832,"context_line":".. figure:: /figures/nova-weighting-hosts.png"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"If cells are used, cells are weighted by the scheduler in the same manner as"},{"line_number":835,"context_line":"hosts."},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"Hosts and cells are weighted based on the following options in the"},{"line_number":838,"context_line":"``/etc/nova/nova.conf`` file:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fdfeff1_8e676e26","line":835,"range":{"start_line":834,"start_character":0,"end_line":835,"end_character":6},"updated":"2019-01-19 22:57:17.000000000","message":"Note to self: we should remove the cells content from these docs since they are for cells v1 and would otherwise just be confusing to normal deployments here.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1020,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1021,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1022,"context_line":"in more than one host aggregate. Administrators can also control the weight"},{"line_number":1023,"context_line":"value by setting the ``xxx_weight_multiplier`` aggregate metadata."},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1026,"context_line":"availability zone. Availability zones are different from host aggregates in"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fdfeff1_ae7fd2a9","line":1023,"range":{"start_line":1022,"start_character":33,"end_line":1023,"end_character":66},"updated":"2019-01-19 22:57:17.000000000","message":"nit: I would maybe re-word this as:\n\n\"Weight multipliers can be controlled on a per-aggregate basis by setting the desired ``xxx_weight_multiplier`` aggregate metadata.\"","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"a host aggregate, and matching flavor extra specifications.  The scheduler then"},{"line_number":1020,"context_line":"endeavors to match user requests for instance of the given flavor to a host"},{"line_number":1021,"context_line":"aggregate with the same key-value pair in its metadata.  Compute nodes can be"},{"line_number":1022,"context_line":"in more than one host aggregate. Administrators can also control the weight"},{"line_number":1023,"context_line":"value by setting the ``xxx_weight_multiplier`` aggregate metadata."},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"Administrators are able to optionally expose a host aggregate as an"},{"line_number":1026,"context_line":"availability zone. Availability zones are different from host aggregates in"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fdfeff1_019b4c72","line":1023,"range":{"start_line":1022,"start_character":33,"end_line":1023,"end_character":66},"in_reply_to":"9fdfeff1_ae7fd2a9","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"doc/source/user/filter-scheduler.rst":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":403,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`, is negative, the"},{"line_number":404,"context_line":"  host with least RAM available will win (useful for stacking hosts, instead"},{"line_number":405,"context_line":"  of spreading)."},{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":407,"context_line":"  `ram_weight_multiplier`) is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"},{"line_number":410,"context_line":"  one value is found for a host, the minimum value will be used."}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_b6606d34","line":407,"range":{"start_line":406,"start_character":50,"end_line":407,"end_character":26},"updated":"2019-01-08 12:29:21.000000000","message":"this seems incorrect, maybe just simpler as \"with key `ram_weight_multiplier`, but I\u0027m no expert.","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":403,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`, is negative, the"},{"line_number":404,"context_line":"  host with least RAM available will win (useful for stacking hosts, instead"},{"line_number":405,"context_line":"  of spreading)."},{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":407,"context_line":"  `ram_weight_multiplier`) is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"},{"line_number":410,"context_line":"  one value is found for a host, the minimum value will be used."}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_b9f7fef5","line":407,"range":{"start_line":406,"start_character":50,"end_line":407,"end_character":26},"in_reply_to":"dfd5e7cf_b6606d34","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":433,"context_line":"    metrics_weight_setting \u003d name1\u003d1.0, name2\u003d-1.0"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":436,"context_line":"  `metrics_weight_multiplier`) is found, this value would be chosen as the ram"},{"line_number":437,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":438,"context_line":"  :oslo.config:option:`metrics.weight_multiplier`. If more than"},{"line_number":439,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":440,"context_line":"* |IoOpsWeigher| The weigher can compute the weight based on the compute node"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_b63f0dd5","line":437,"range":{"start_line":436,"start_character":75,"end_line":437,"end_character":18},"updated":"2019-01-08 12:29:21.000000000","message":"metrics","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":433,"context_line":"    metrics_weight_setting \u003d name1\u003d1.0, name2\u003d-1.0"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":436,"context_line":"  `metrics_weight_multiplier`) is found, this value would be chosen as the ram"},{"line_number":437,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":438,"context_line":"  :oslo.config:option:`metrics.weight_multiplier`. If more than"},{"line_number":439,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":440,"context_line":"* |IoOpsWeigher| The weigher can compute the weight based on the compute node"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_39478e4e","line":437,"range":{"start_line":436,"start_character":75,"end_line":437,"end_character":18},"in_reply_to":"dfd5e7cf_b63f0dd5","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":442,"context_line":"  hosts. If the multiplier is positive, the weigher prefer choosing heavy"},{"line_number":443,"context_line":"  workload compute hosts, the weighing has the opposite effect of the default."},{"line_number":444,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":445,"context_line":"  `io_ops_weight_multiplier`) is found, this value would be chosen as the disk"},{"line_number":446,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":447,"context_line":"  :oslo.config:option:`filter_scheduler.io_ops_weight_multiplier`. If more"},{"line_number":448,"context_line":"  than one value is found for a host, the minimum value will be used."},{"line_number":449,"context_line":"* |PCIWeigher| Compute a weighting based on the number of PCI devices on the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_16593959","line":446,"range":{"start_line":445,"start_character":73,"end_line":446,"end_character":19},"updated":"2019-01-08 12:29:21.000000000","message":"IO ops","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":442,"context_line":"  hosts. If the multiplier is positive, the weigher prefer choosing heavy"},{"line_number":443,"context_line":"  workload compute hosts, the weighing has the opposite effect of the default."},{"line_number":444,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":445,"context_line":"  `io_ops_weight_multiplier`) is found, this value would be chosen as the disk"},{"line_number":446,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":447,"context_line":"  :oslo.config:option:`filter_scheduler.io_ops_weight_multiplier`. If more"},{"line_number":448,"context_line":"  than one value is found for a host, the minimum value will be used."},{"line_number":449,"context_line":"* |PCIWeigher| Compute a weighting based on the number of PCI devices on the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_f97a6686","line":446,"range":{"start_line":445,"start_character":73,"end_line":446,"end_character":19},"in_reply_to":"dfd5e7cf_16593959","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    scheduling issues."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":468,"context_line":"  `pci_weight_multiplier`) is found, this value would be chosen as the disk"},{"line_number":469,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":470,"context_line":"  :oslo.config:option:`filter_scheduler.pci_weight_multiplier`. If more than"},{"line_number":471,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":472,"context_line":"* |ServerGroupSoftAffinityWeigher| The weigher can compute the weight based"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_f61ef56e","line":469,"range":{"start_line":468,"start_character":70,"end_line":469,"end_character":18},"updated":"2019-01-08 12:29:21.000000000","message":"pci","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    scheduling issues."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":468,"context_line":"  `pci_weight_multiplier`) is found, this value would be chosen as the disk"},{"line_number":469,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":470,"context_line":"  :oslo.config:option:`filter_scheduler.pci_weight_multiplier`. If more than"},{"line_number":471,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":472,"context_line":"* |ServerGroupSoftAffinityWeigher| The weigher can compute the weight based"}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_1963aade","line":469,"range":{"start_line":468,"start_character":70,"end_line":469,"end_character":18},"in_reply_to":"dfd5e7cf_f61ef56e","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":476,"context_line":"  would mean that the affinity weigher would prefer non collocating placement."},{"line_number":477,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":478,"context_line":"  `soft_affinity_weight_multiplier`) is found, this value would be chosen"},{"line_number":479,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":480,"context_line":"  :oslo.config:option:`filter_scheduler.soft_affinity_weight_multiplier`."},{"line_number":481,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_b6186d81","line":479,"range":{"start_line":479,"start_character":9,"end_line":479,"end_character":14},"updated":"2019-01-08 12:29:21.000000000","message":"soft affinity","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"  would mean that the affinity weigher would prefer non collocating placement."},{"line_number":477,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":478,"context_line":"  `soft_affinity_weight_multiplier`) is found, this value would be chosen"},{"line_number":479,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":480,"context_line":"  :oslo.config:option:`filter_scheduler.soft_affinity_weight_multiplier`."},{"line_number":481,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_d99a02c4","line":479,"range":{"start_line":479,"start_character":9,"end_line":479,"end_character":14},"in_reply_to":"dfd5e7cf_b6186d81","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"  collocating placement."},{"line_number":489,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":490,"context_line":"  `soft_anti_affinity_weight_multiplier`) is found, this value would be chosen"},{"line_number":491,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":492,"context_line":"  :oslo.config:option:`filter_scheduler.soft_anti_affinity_weight_multiplier`."},{"line_number":493,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":494,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_560d813c","line":491,"range":{"start_line":491,"start_character":9,"end_line":491,"end_character":14},"updated":"2019-01-08 12:29:21.000000000","message":"soft anti","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":488,"context_line":"  collocating placement."},{"line_number":489,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":490,"context_line":"  `soft_anti_affinity_weight_multiplier`) is found, this value would be chosen"},{"line_number":491,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":492,"context_line":"  :oslo.config:option:`filter_scheduler.soft_anti_affinity_weight_multiplier`."},{"line_number":493,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":494,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_b9a93ee0","line":491,"range":{"start_line":491,"start_character":9,"end_line":491,"end_character":14},"in_reply_to":"dfd5e7cf_560d813c","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":497,"context_line":"  recent failures. This avoids taking computes fully out of rotation."},{"line_number":498,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":499,"context_line":"  `build_failure_weight_multiplier`) is found, this value would be chosen"},{"line_number":500,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":501,"context_line":"  :oslo.config:option:`filter_scheduler.build_failure_weight_multiplier`."},{"line_number":502,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":503,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_760a0527","line":500,"range":{"start_line":500,"start_character":9,"end_line":500,"end_character":14},"updated":"2019-01-08 12:29:21.000000000","message":"build failure","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":497,"context_line":"  recent failures. This avoids taking computes fully out of rotation."},{"line_number":498,"context_line":"  After the Stein version, if per-aggregate value (which the key is"},{"line_number":499,"context_line":"  `build_failure_weight_multiplier`) is found, this value would be chosen"},{"line_number":500,"context_line":"  as the disk weight multiplier. Otherwise, it will fall back to the"},{"line_number":501,"context_line":"  :oslo.config:option:`filter_scheduler.build_failure_weight_multiplier`."},{"line_number":502,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":503,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"dfd5e7cf_19b88a28","line":500,"range":{"start_line":500,"start_character":9,"end_line":500,"end_character":14},"in_reply_to":"dfd5e7cf_760a0527","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":488,"context_line":"  collocating placement."},{"line_number":489,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":490,"context_line":"  `soft_anti_affinity_weight_multiplier` is found, this value would be chosen"},{"line_number":491,"context_line":"  as the soft anti affinity weight multiplier. Otherwise, it will fall back to"},{"line_number":492,"context_line":"  the :oslo.config:option:`filter_scheduler.soft_anti_affinity_weight_multiplier`."},{"line_number":493,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":494,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_dae98280","line":491,"range":{"start_line":491,"start_character":14,"end_line":491,"end_character":28},"updated":"2019-01-09 03:28:15.000000000","message":"anti-affinity","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":488,"context_line":"  collocating placement."},{"line_number":489,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":490,"context_line":"  `soft_anti_affinity_weight_multiplier` is found, this value would be chosen"},{"line_number":491,"context_line":"  as the soft anti affinity weight multiplier. Otherwise, it will fall back to"},{"line_number":492,"context_line":"  the :oslo.config:option:`filter_scheduler.soft_anti_affinity_weight_multiplier`."},{"line_number":493,"context_line":"  If more than one value is found for a host, the minimum value will be used."},{"line_number":494,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfd5e7cf_53fd7d38","line":491,"range":{"start_line":491,"start_character":14,"end_line":491,"end_character":28},"in_reply_to":"dfd5e7cf_dae98280","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d3ec6425a609e3c6584f46ee5afa3f5bdb08e243","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":407,"context_line":"  `ram_weight_multiplier` is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"},{"line_number":410,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":411,"context_line":"* |CPUWeigher| Compute weight based on available vCPUs on the compute node."},{"line_number":412,"context_line":"  Sort with the largest weight winning. If the multiplier,"},{"line_number":413,"context_line":"  :oslo.config:option:`filter_scheduler.cpu_weight_multiplier`, is negative, the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dfd5e7cf_5638ef3b","line":410,"range":{"start_line":409,"start_character":64,"end_line":410,"end_character":64},"updated":"2019-01-10 11:17:52.000000000","message":"I think this is a little bit confusing, I know what you mention here is that multiple values from agg was found then we use the minimum from them. Currently it seems that the config vaule could be selected if it is the minimum. I suggest to be more clear here.Or maybe just move the last sentence before the ``otherwise``, it cloud be more clear.","commit_id":"f4f860b9937bd3af97e5ac0af40e6b71bc4bb2d6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"83337e2ab362b879bb6d078be0f4e3b27644d8e5","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":407,"context_line":"  `ram_weight_multiplier` is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"},{"line_number":410,"context_line":"  one value is found for a host, the minimum value will be used."},{"line_number":411,"context_line":"* |CPUWeigher| Compute weight based on available vCPUs on the compute node."},{"line_number":412,"context_line":"  Sort with the largest weight winning. If the multiplier,"},{"line_number":413,"context_line":"  :oslo.config:option:`filter_scheduler.cpu_weight_multiplier`, is negative, the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bfdaf3ff_2a567308","line":410,"range":{"start_line":409,"start_character":64,"end_line":410,"end_character":64},"in_reply_to":"dfd5e7cf_5638ef3b","updated":"2019-01-11 08:36:51.000000000","message":"Yes, agree","commit_id":"f4f860b9937bd3af97e5ac0af40e6b71bc4bb2d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":403,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`, is negative, the"},{"line_number":404,"context_line":"  host with least RAM available will win (useful for stacking hosts, instead"},{"line_number":405,"context_line":"  of spreading)."},{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":407,"context_line":"  `ram_weight_multiplier` is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fdfeff1_ae583256","line":406,"range":{"start_line":406,"start_character":2,"end_line":406,"end_character":25},"updated":"2019-01-19 22:57:17.000000000","message":"nit: I would say, \"Starting with the Stein release\" to avoid confusing people thinking \"after Stein\" means starting in Train.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":403,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`, is negative, the"},{"line_number":404,"context_line":"  host with least RAM available will win (useful for stacking hosts, instead"},{"line_number":405,"context_line":"  of spreading)."},{"line_number":406,"context_line":"  After the Stein version, if per-aggregate value with the key"},{"line_number":407,"context_line":"  `ram_weight_multiplier` is found, this value would be chosen as the ram"},{"line_number":408,"context_line":"  weight multiplier. Otherwise, it will fall back to the"},{"line_number":409,"context_line":"  :oslo.config:option:`filter_scheduler.ram_weight_multiplier`. If more than"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9fdfeff1_a1892027","line":406,"range":{"start_line":406,"start_character":2,"end_line":406,"end_character":25},"in_reply_to":"9fdfeff1_ae583256","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971cacb42823e40eda47df9c31c877a4b1b52da1","unresolved":false,"context_lines":[{"line_number":505,"context_line":"  `build_failure_weight_multiplier` is found, this value would be chosen"},{"line_number":506,"context_line":"  as the build failure weight multiplier. Otherwise, it will fall back to the"},{"line_number":507,"context_line":"  :oslo.config:option:`filter_scheduler.build_failure_weight_multiplier`."},{"line_number":508,"context_line":"  If more than one value is found for a host in aggregate metadata, the"},{"line_number":509,"context_line":"  minimum value will be used."},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Filter Scheduler makes a local list of acceptable hosts by repeated filtering and"},{"line_number":512,"context_line":"weighing. Each time it chooses a host, it virtually consumes resources on it,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fdfeff1_c083f555","line":509,"range":{"start_line":508,"start_character":2,"end_line":509,"end_character":29},"updated":"2019-01-21 15:15:47.000000000","message":"Regarding https://review.openstack.org/#/c/628163/12/nova/tests/unit/scheduler/weights/test_weights_compute.py@95 I sort of feel like we should say something here about this case being special given the negation, but I\u0027m failing to come up with any wording that would not cause confusion.","commit_id":"e66443770dc97f3006b360095b5158d2b203a74a"}],"nova/scheduler/utils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            consumer_generation\u003dNone)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_b27f35aa","line":1042,"range":{"start_line":1042,"start_character":38,"end_line":1042,"end_character":42},"updated":"2019-01-03 14:44:06.000000000","message":"type is a reserved word, so should probably rename this variable. Maybe \"multplier_type\"?\n\nWould be good to add a docstring for this utility method to avoid confusion.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            consumer_generation\u003dNone)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_8a598aff","line":1042,"range":{"start_line":1042,"start_character":38,"end_line":1042,"end_character":42},"in_reply_to":"ffd0ebdf_b27f35aa","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_cd1b3a71","line":1043,"range":{"start_line":1043,"start_character":26,"end_line":1043,"end_character":43},"updated":"2019-01-03 14:44:06.000000000","message":"This now enforces a certain naming convention which we might be lucky and have that consistently for the in-tree filters but there could be out of tree weighers that don\u0027t match this. It might be more flexible to just have the weigher pass in the multiplier name rather than us try to guess.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_6a70e673","line":1043,"range":{"start_line":1043,"start_character":26,"end_line":1043,"end_character":43},"in_reply_to":"ffd0ebdf_cd1b3a71","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"},{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_724b0d87","line":1045,"range":{"start_line":1045,"start_character":8,"end_line":1045,"end_character":11},"updated":"2019-01-03 14:44:06.000000000","message":"This should be made generic, maybe just \"multipliers\".","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"def get_weight_multiplier(host_state, type):"},{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"},{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_0a6d9a97","line":1045,"range":{"start_line":1045,"start_character":8,"end_line":1045,"end_character":11},"in_reply_to":"ffd0ebdf_724b0d87","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"},{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"},{"line_number":1049,"context_line":"                cpu_multipliers.append(float(val))"},{"line_number":1050,"context_line":"            except (ValueError, TypeError):"},{"line_number":1051,"context_line":"                LOG.error(\"Failed to load %(multiplier_name)s, the value \""},{"line_number":1052,"context_line":"                          \"%(val)s is invalid\","}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_b22df5a9","line":1049,"range":{"start_line":1046,"start_character":8,"end_line":1049,"end_character":50},"updated":"2019-01-03 14:44:06.000000000","message":"Seems we could just re-use nova.scheduler.filters.utils.aggregate_values_from_key for this processing logic.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    multiplier_name \u003d \u0027%s_weight_multiplier\u0027 % type"},{"line_number":1044,"context_line":"    if host_state and host_state.aggregates:"},{"line_number":1045,"context_line":"        cpu_multipliers \u003d []"},{"line_number":1046,"context_line":"        for agg in host_state.aggregates:"},{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"},{"line_number":1049,"context_line":"                cpu_multipliers.append(float(val))"},{"line_number":1050,"context_line":"            except (ValueError, TypeError):"},{"line_number":1051,"context_line":"                LOG.error(\"Failed to load %(multiplier_name)s, the value \""},{"line_number":1052,"context_line":"                          \"%(val)s is invalid\","}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_1d73a617","line":1049,"range":{"start_line":1046,"start_character":8,"end_line":1049,"end_character":50},"in_reply_to":"ffd0ebdf_b22df5a9","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"},{"line_number":1049,"context_line":"                cpu_multipliers.append(float(val))"},{"line_number":1050,"context_line":"            except (ValueError, TypeError):"},{"line_number":1051,"context_line":"                LOG.error(\"Failed to load %(multiplier_name)s, the value \""},{"line_number":1052,"context_line":"                          \"%(val)s is invalid\","},{"line_number":1053,"context_line":"                          {\u0027multiplier_name\u0027: multiplier_name, \u0027val\u0027: val})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_b2065520","line":1050,"range":{"start_line":1050,"start_character":20,"end_line":1050,"end_character":30},"updated":"2019-01-03 14:44:06.000000000","message":"We could use validate_num_values for this also. Those two utility methods are how filters like AggregateCoreFilter get the allocation ratio metadata from 0 or more aggregates the host is in, validate the type (float) and pick the min if there are multiple. We should do the same for the weigher code.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"            val \u003d agg.metadata.get(multiplier_name, None)"},{"line_number":1048,"context_line":"            try:"},{"line_number":1049,"context_line":"                cpu_multipliers.append(float(val))"},{"line_number":1050,"context_line":"            except (ValueError, TypeError):"},{"line_number":1051,"context_line":"                LOG.error(\"Failed to load %(multiplier_name)s, the value \""},{"line_number":1052,"context_line":"                          \"%(val)s is invalid\","},{"line_number":1053,"context_line":"                          {\u0027multiplier_name\u0027: multiplier_name, \u0027val\u0027: val})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_bd613a3c","line":1050,"range":{"start_line":1050,"start_character":20,"end_line":1050,"end_character":30},"in_reply_to":"ffd0ebdf_b2065520","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.objects import instance as obj_instance"},{"line_number":36,"context_line":"from nova import rc_fields as fields"},{"line_number":37,"context_line":"from nova import rpc"},{"line_number":38,"context_line":"from nova.scheduler.filters import utils"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_1a314a0c","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":40},"updated":"2019-01-09 03:28:15.000000000","message":"could we use filter_utils ? as compute_utils. I was having a litlle bit difficulty when I see utils.xxx below as we are in utils.py already. But maybe it\u0027s just me. :)","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.objects import instance as obj_instance"},{"line_number":36,"context_line":"from nova import rc_fields as fields"},{"line_number":37,"context_line":"from nova import rpc"},{"line_number":38,"context_line":"from nova.scheduler.filters import utils"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_f3bcb16a","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":40},"in_reply_to":"dfd5e7cf_1a314a0c","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e5ca3494617cb728657de041b1011a0f46016f9c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.objects import instance as obj_instance"},{"line_number":36,"context_line":"from nova import rc_fields as fields"},{"line_number":37,"context_line":"from nova import rpc"},{"line_number":38,"context_line":"from nova.scheduler.filters import filters_utils"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dfd5e7cf_8c8adf18","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":48},"updated":"2019-01-09 10:09:44.000000000","message":"this apreantly does not exist which is why all the gate jobs failed","commit_id":"4e1f6b1c1a15fd6aa31d8100626d771563a06b3d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.objects import instance as obj_instance"},{"line_number":36,"context_line":"from nova import rc_fields as fields"},{"line_number":37,"context_line":"from nova import rpc"},{"line_number":38,"context_line":"from nova.scheduler.filters import filters_utils"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dfd5e7cf_5551d761","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":48},"in_reply_to":"dfd5e7cf_8c8adf18","updated":"2019-01-09 15:52:31.000000000","message":"Sorry for my stupid mistakes. done.","commit_id":"4e1f6b1c1a15fd6aa31d8100626d771563a06b3d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"5dc64748eba4de47200493dd7089c1bebb12df51","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.objects import instance as obj_instance"},{"line_number":36,"context_line":"from nova import rc_fields as fields"},{"line_number":37,"context_line":"from nova import rpc"},{"line_number":38,"context_line":"from nova.scheduler.filters import filters_utils"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfdaf3ff_da55321f","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":48},"updated":"2019-01-11 06:25:37.000000000","message":"wrong import","commit_id":"1857337234544eae5ae2fa1c3a9f5bae093e19d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"def get_weight_multiplier(host_state, multiplier_name, multiplier_config):"},{"line_number":1044,"context_line":"    \"\"\"Given a host_state object, multplier_type name and multiplier_config,"},{"line_number":1045,"context_line":"    returns the weight multiplier."},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    It reads the \"multiplier_name\" from \"aggregate metadata\" in host_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_2e3a02e7","line":1044,"range":{"start_line":1044,"start_character":15,"end_line":1044,"end_character":25},"updated":"2019-01-19 22:57:17.000000000","message":"HostState","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"def get_weight_multiplier(host_state, multiplier_name, multiplier_config):"},{"line_number":1044,"context_line":"    \"\"\"Given a host_state object, multplier_type name and multiplier_config,"},{"line_number":1045,"context_line":"    returns the weight multiplier."},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    It reads the \"multiplier_name\" from \"aggregate metadata\" in host_state"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_21d0d0f7","line":1044,"range":{"start_line":1044,"start_character":15,"end_line":1044,"end_character":25},"in_reply_to":"9fdfeff1_2e3a02e7","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    It reads the \"multiplier_name\" from \"aggregate metadata\" in host_state"},{"line_number":1048,"context_line":"    to override the multiplier_config. If the aggregate metadata doesn\u0027t"},{"line_number":1049,"context_line":"    contain the multiplier_type, the multiplier_config will be returned"},{"line_number":1050,"context_line":"    directly."},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"    :param host_state: The HostState object, which contains aggregate metadata"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4e3f46d6","line":1049,"range":{"start_line":1049,"start_character":16,"end_line":1049,"end_character":31},"updated":"2019-01-19 22:57:17.000000000","message":"multiplier_name","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    It reads the \"multiplier_name\" from \"aggregate metadata\" in host_state"},{"line_number":1048,"context_line":"    to override the multiplier_config. If the aggregate metadata doesn\u0027t"},{"line_number":1049,"context_line":"    contain the multiplier_type, the multiplier_config will be returned"},{"line_number":1050,"context_line":"    directly."},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"    :param host_state: The HostState object, which contains aggregate metadata"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_81ebbcae","line":1049,"range":{"start_line":1049,"start_character":16,"end_line":1049,"end_character":31},"in_reply_to":"9fdfeff1_4e3f46d6","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"    :param host_state: The HostState object, which contains aggregate metadata"},{"line_number":1053,"context_line":"    :param multiplier_name: The weight multiplier name, like"},{"line_number":1054,"context_line":"           \"cpu_weight_multiplier\"."},{"line_number":1055,"context_line":"    :param multiplier_config: The weight multiplier configuration"},{"line_number":1056,"context_line":"    \"\"\""},{"line_number":1057,"context_line":"    aggregate_vals \u003d filters_utils.aggregate_values_from_key(host_state,"},{"line_number":1058,"context_line":"                                                             multiplier_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_ee239abd","line":1055,"range":{"start_line":1055,"start_character":52,"end_line":1055,"end_character":65},"updated":"2019-01-19 22:57:17.000000000","message":"configuration value","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"    :param host_state: The HostState object, which contains aggregate metadata"},{"line_number":1053,"context_line":"    :param multiplier_name: The weight multiplier name, like"},{"line_number":1054,"context_line":"           \"cpu_weight_multiplier\"."},{"line_number":1055,"context_line":"    :param multiplier_config: The weight multiplier configuration"},{"line_number":1056,"context_line":"    \"\"\""},{"line_number":1057,"context_line":"    aggregate_vals \u003d filters_utils.aggregate_values_from_key(host_state,"},{"line_number":1058,"context_line":"                                                             multiplier_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_c1e1c4d2","line":1055,"range":{"start_line":1055,"start_character":52,"end_line":1055,"end_character":65},"in_reply_to":"9fdfeff1_ee239abd","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"        value \u003d filters_utils.validate_num_values("},{"line_number":1061,"context_line":"            aggregate_vals, multiplier_config, cast_to\u003dfloat)"},{"line_number":1062,"context_line":"    except ValueError as e:"},{"line_number":1063,"context_line":"        LOG.warning(\"Could not decode weight multiplier: \u0027%s\u0027\", e)"},{"line_number":1064,"context_line":"        value \u003d multiplier_config"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_ae2d92a9","line":1063,"updated":"2019-01-19 22:57:17.000000000","message":"Include the multiplier_name value in this message.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"        value \u003d filters_utils.validate_num_values("},{"line_number":1061,"context_line":"            aggregate_vals, multiplier_config, cast_to\u003dfloat)"},{"line_number":1062,"context_line":"    except ValueError as e:"},{"line_number":1063,"context_line":"        LOG.warning(\"Could not decode weight multiplier: \u0027%s\u0027\", e)"},{"line_number":1064,"context_line":"        value \u003d multiplier_config"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_e1c40843","line":1063,"in_reply_to":"9fdfeff1_ae2d92a9","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/scheduler/weights/affinity.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return len(member_on_host)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class ServerGroupSoftAffinityWeigher(_SoftAffinityWeigherBase):"},{"line_number":57,"context_line":"    policy_name \u003d \u0027soft-affinity\u0027"},{"line_number":58,"context_line":"    warning_sent \u003d False"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_ce2a568f","line":56,"updated":"2019-01-19 22:57:17.000000000","message":"It might be cleaner if you rebase on top of this which removes some of the old code in here:\n\nhttps://review.openstack.org/#/c/628205/","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return len(member_on_host)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class ServerGroupSoftAffinityWeigher(_SoftAffinityWeigherBase):"},{"line_number":57,"context_line":"    policy_name \u003d \u0027soft-affinity\u0027"},{"line_number":58,"context_line":"    warning_sent \u003d False"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_41cdd45b","line":56,"in_reply_to":"9fdfeff1_ce2a568f","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/scheduler/weights/cpu.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"CPU Weigher.  Weigh hosts by their CPU usage."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":20,"context_line":"stacking, you can set the \u0027cpu_weight_multiplier\u0027 option to a negative"},{"line_number":21,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_3a1f6e6d","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":63},"updated":"2019-01-09 03:28:15.000000000","message":"do we need to update this also?","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"CPU Weigher.  Weigh hosts by their CPU usage."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":20,"context_line":"stacking, you can set the \u0027cpu_weight_multiplier\u0027 option to a negative"},{"line_number":21,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_134cd59c","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":63},"in_reply_to":"dfd5e7cf_3a1f6e6d","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"}],"nova/scheduler/weights/disk.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Disk Weigher.  Weigh hosts by their disk usage."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":19,"context_line":"stacking, you can set the \u0027disk_weight_multiplier\u0027 option to a negative"},{"line_number":20,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_fa180682","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":63},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Disk Weigher.  Weigh hosts by their disk usage."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":19,"context_line":"stacking, you can set the \u0027disk_weight_multiplier\u0027 option to a negative"},{"line_number":20,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_737d21b0","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":63},"in_reply_to":"dfd5e7cf_fa180682","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"}],"nova/scheduler/weights/io_ops.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Io Ops Weigher. Weigh hosts by their io ops number."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to preferably choose light workload compute hosts. If you prefer"},{"line_number":19,"context_line":"choosing heavy workload compute hosts, you can set \u0027io_ops_weight_multiplier\u0027"},{"line_number":20,"context_line":"option to a positive number and the weighing has the opposite effect of the"},{"line_number":21,"context_line":"default."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_5a07d21d","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":8},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Io Ops Weigher. Weigh hosts by their io ops number."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to preferably choose light workload compute hosts. If you prefer"},{"line_number":19,"context_line":"choosing heavy workload compute hosts, you can set \u0027io_ops_weight_multiplier\u0027"},{"line_number":20,"context_line":"option to a positive number and the weighing has the opposite effect of the"},{"line_number":21,"context_line":"default."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_3351d937","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":8},"in_reply_to":"dfd5e7cf_5a07d21d","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"}],"nova/scheduler/weights/metrics.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":49,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":50,"context_line":"        return CONF.metrics.weight_multiplier"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":53,"context_line":"        value \u003d 0.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_0d406235","line":50,"range":{"start_line":50,"start_character":20,"end_line":50,"end_character":45},"updated":"2019-01-03 14:44:06.000000000","message":"This one would be tricky...I would think the aggregate key would be \"metrics_weight_multiplier\" but that won\u0027t match what the utility tries to lookup in the config (CONF.filter_scheduler.metrics_weight_multiplier doesn\u0027t exist). Maybe the utility needs to take the multiplier name and the default value (which comes from config).","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":49,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":50,"context_line":"        return CONF.metrics.weight_multiplier"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":53,"context_line":"        value \u003d 0.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_1d040617","line":50,"range":{"start_line":50,"start_character":20,"end_line":50,"end_character":45},"in_reply_to":"ffd0ebdf_0d406235","updated":"2019-01-04 06:44:49.000000000","message":"OK, done. and one thing want to sure, do you just mean it can make the utils more generic for future use? I talked with kevin, he said, we only proposed to support cpu/ram/disk in this bp.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd63b82e93256bf223d209d06ef81b225a5e0d85","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":49,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":50,"context_line":"        return CONF.metrics.weight_multiplier"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":53,"context_line":"        value \u003d 0.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_62c6c26a","line":50,"range":{"start_line":50,"start_character":20,"end_line":50,"end_character":45},"in_reply_to":"ffd0ebdf_1d040617","updated":"2019-01-04 16:09:10.000000000","message":"The spec doesn\u0027t say anything about restricting this to cpu/ram/disk:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/stein/approved/per-aggregate-scheduling-weight.html#proposed-change\n\nIn fact, the way it is written it reads (to me anyway) like we will support this for any configurable weight multiplier.","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"}],"nova/scheduler/weights/pci.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"PCI Affinity Weigher.  Weigh hosts by their PCI availability."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Prefer hosts with PCI devices for instances with PCI requirements and vice"},{"line_number":20,"context_line":"versa. Configure the importance of this affinitization using the"},{"line_number":21,"context_line":"\u0027pci_weight_multiplier\u0027 option."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_1dff0402","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":31},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"PCI Affinity Weigher.  Weigh hosts by their PCI availability."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Prefer hosts with PCI devices for instances with PCI requirements and vice"},{"line_number":20,"context_line":"versa. Configure the importance of this affinitization using the"},{"line_number":21,"context_line":"\u0027pci_weight_multiplier\u0027 option."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_5359fd57","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":31},"in_reply_to":"dfd5e7cf_1dff0402","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"}],"nova/scheduler/weights/ram.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":34,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":35,"context_line":"        return utils.get_weight_multiplier(host_state, \u0027cpu\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":38,"context_line":"        \"\"\"Higher weights win.  We want spreading to be the default.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_ad2cb699","line":35,"range":{"start_line":35,"start_character":56,"end_line":35,"end_character":59},"updated":"2019-01-03 14:44:06.000000000","message":"ram","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":34,"context_line":"        \"\"\"Override the weight multiplier.\"\"\""},{"line_number":35,"context_line":"        return utils.get_weight_multiplier(host_state, \u0027cpu\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _weigh_object(self, host_state, weight_properties):"},{"line_number":38,"context_line":"        \"\"\"Higher weights win.  We want spreading to be the default.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_4a6962bc","line":35,"range":{"start_line":35,"start_character":56,"end_line":35,"end_character":59},"in_reply_to":"ffd0ebdf_ad2cb699","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"RAM Weigher.  Weigh hosts by their RAM usage."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":19,"context_line":"stacking, you can set the \u0027ram_weight_multiplier\u0027 option to a negative"},{"line_number":20,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_bd0fd82c","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":63},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"RAM Weigher.  Weigh hosts by their RAM usage."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The default is to spread instances across all hosts evenly.  If you prefer"},{"line_number":19,"context_line":"stacking, you can set the \u0027ram_weight_multiplier\u0027 option to a negative"},{"line_number":20,"context_line":"number and the weighing has the opposite effect of the default."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_3336b905","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":63},"in_reply_to":"dfd5e7cf_bd0fd82c","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"}],"nova/tests/unit/scheduler/test_utils.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":899,"context_line":"            objects.Aggregate("},{"line_number":900,"context_line":"                id\u003d1,"},{"line_number":901,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":902,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":903,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u0027invaild\u0027},"},{"line_number":904,"context_line":"            )]"},{"line_number":905,"context_line":"        # Get value from default given value"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_dda41c0b","line":902,"range":{"start_line":902,"start_character":16,"end_line":902,"end_character":35},"updated":"2019-01-09 03:28:15.000000000","message":"this should be same with your host1 obj","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":899,"context_line":"            objects.Aggregate("},{"line_number":900,"context_line":"                id\u003d1,"},{"line_number":901,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":902,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":903,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u0027invaild\u0027},"},{"line_number":904,"context_line":"            )]"},{"line_number":905,"context_line":"        # Get value from default given value"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_532edda5","line":902,"range":{"start_line":902,"start_character":16,"end_line":902,"end_character":35},"in_reply_to":"dfd5e7cf_dda41c0b","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":912,"context_line":"            objects.Aggregate("},{"line_number":913,"context_line":"                id\u003d1,"},{"line_number":914,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":915,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":916,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.9\u0027},"},{"line_number":917,"context_line":"            )]"},{"line_number":918,"context_line":"        # Get value from aggregate metadata"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_9dae94e5","line":915,"range":{"start_line":915,"start_character":15,"end_line":915,"end_character":36},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":912,"context_line":"            objects.Aggregate("},{"line_number":913,"context_line":"                id\u003d1,"},{"line_number":914,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":915,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":916,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.9\u0027},"},{"line_number":917,"context_line":"            )]"},{"line_number":918,"context_line":"        # Get value from aggregate metadata"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_732be193","line":915,"range":{"start_line":915,"start_character":15,"end_line":915,"end_character":36},"in_reply_to":"dfd5e7cf_9dae94e5","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":925,"context_line":"            objects.Aggregate("},{"line_number":926,"context_line":"                id\u003d1,"},{"line_number":927,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":928,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":929,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.9\u0027}),"},{"line_number":930,"context_line":"            objects.Aggregate("},{"line_number":931,"context_line":"                id\u003d2,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_bdab58d4","line":928,"range":{"start_line":928,"start_character":16,"end_line":928,"end_character":36},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":925,"context_line":"            objects.Aggregate("},{"line_number":926,"context_line":"                id\u003d1,"},{"line_number":927,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":928,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":929,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.9\u0027}),"},{"line_number":930,"context_line":"            objects.Aggregate("},{"line_number":931,"context_line":"                id\u003d2,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_131a957c","line":928,"range":{"start_line":928,"start_character":16,"end_line":928,"end_character":36},"in_reply_to":"dfd5e7cf_bdab58d4","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":930,"context_line":"            objects.Aggregate("},{"line_number":931,"context_line":"                id\u003d2,"},{"line_number":932,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":933,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":934,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.8\u0027}),"},{"line_number":935,"context_line":"        ]"},{"line_number":936,"context_line":"        # Get min value from aggregate metadata"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_5db82c29","line":933,"range":{"start_line":933,"start_character":15,"end_line":933,"end_character":36},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":930,"context_line":"            objects.Aggregate("},{"line_number":931,"context_line":"                id\u003d2,"},{"line_number":932,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":933,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":934,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u00271.8\u0027}),"},{"line_number":935,"context_line":"        ]"},{"line_number":936,"context_line":"        # Get min value from aggregate metadata"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_331f996d","line":933,"range":{"start_line":933,"start_character":15,"end_line":933,"end_character":36},"in_reply_to":"dfd5e7cf_5db82c29","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        mock_is_rebuild.assert_called_once_with(mock.sentinel.spec_obj)"},{"line_number":891,"context_line":"        self.assertFalse(mock_client.claim_resources.called)"},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"    def test_get_weight_multiplier(self):"},{"line_number":894,"context_line":"        host_attr \u003d {\u0027vcpus_total\u0027: 4, \u0027vcpus_used\u0027: 6,"},{"line_number":895,"context_line":"                     \u0027cpu_allocation_ratio\u0027: 1.0}"},{"line_number":896,"context_line":"        host1 \u003d fakes.FakeHostState(\u0027fake-host\u0027, \u0027node\u0027, host_attr)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_71feab06","line":893,"updated":"2019-01-19 22:57:17.000000000","message":"This is a nice test. Arguably we don\u0027t really need it given the redundancy with all of the other specific multiplier tests, it\u0027s good to have it here anyway.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":903,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u0027invaild\u0027},"},{"line_number":904,"context_line":"            )]"},{"line_number":905,"context_line":"        # Get value from default given value"},{"line_number":906,"context_line":"        self.assertEqual("},{"line_number":907,"context_line":"            1.0,"},{"line_number":908,"context_line":"            utils.get_weight_multiplier(host1, \u0027cpu_weight_multiplier\u0027, 1.0)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_8e1e8e6e","line":905,"range":{"start_line":905,"start_character":39,"end_line":905,"end_character":44},"updated":"2019-01-19 22:57:17.000000000","message":"invalid value?","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":903,"context_line":"                metadata\u003d{\u0027cpu_weight_multiplier\u0027: \u0027invaild\u0027},"},{"line_number":904,"context_line":"            )]"},{"line_number":905,"context_line":"        # Get value from default given value"},{"line_number":906,"context_line":"        self.assertEqual("},{"line_number":907,"context_line":"            1.0,"},{"line_number":908,"context_line":"            utils.get_weight_multiplier(host1, \u0027cpu_weight_multiplier\u0027, 1.0)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_213e9029","line":905,"range":{"start_line":905,"start_character":39,"end_line":905,"end_character":44},"in_reply_to":"9fdfeff1_8e1e8e6e","updated":"2019-01-21 06:23:18.000000000","message":"Get value from default given value if the agg meta is invalid.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/tests/unit/scheduler/weights/test_weights_affinity.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            objects.Aggregate("},{"line_number":131,"context_line":"                id\u003d1,"},{"line_number":132,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":133,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":134,"context_line":"                metadata\u003d{\u0027soft_affinity_weight_multiplier\u0027: \u00272\u0027},"},{"line_number":135,"context_line":"            )]"},{"line_number":136,"context_line":"        # read the weight multiplier from metadata to override the config"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_9d977491","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":35},"updated":"2019-01-09 03:28:15.000000000","message":"ditto","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2202394c202f683efe40b64b35b69c474806a1d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            objects.Aggregate("},{"line_number":131,"context_line":"                id\u003d1,"},{"line_number":132,"context_line":"                name\u003d\u0027foo\u0027,"},{"line_number":133,"context_line":"                hosts\u003d[\u0027fake-host\u0027],"},{"line_number":134,"context_line":"                metadata\u003d{\u0027soft_affinity_weight_multiplier\u0027: \u00272\u0027},"},{"line_number":135,"context_line":"            )]"},{"line_number":136,"context_line":"        # read the weight multiplier from metadata to override the config"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfd5e7cf_0effc801","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":35},"in_reply_to":"dfd5e7cf_9d977491","updated":"2019-01-09 15:52:31.000000000","message":"Done","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.assertEqual(1, mock_log.warning.call_count)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def test_soft_affinity_weight_multiplier(self):"},{"line_number":122,"context_line":"        self.flags(soft_affinity_weight_multiplier\u003d-1.0,"},{"line_number":123,"context_line":"                   group\u003d\u0027filter_scheduler\u0027)"},{"line_number":124,"context_line":"        host_attr \u003d {\u0027instances\u0027: {\u0027instance1\u0027: mock.sentinel}}"},{"line_number":125,"context_line":"        host1 \u003d fakes.FakeHostState(\u0027fake-host\u0027, \u0027node\u0027, host_attr)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4e18a680","line":122,"range":{"start_line":122,"start_character":51,"end_line":122,"end_character":55},"updated":"2019-01-19 22:57:17.000000000","message":"Why negative? We\u0027re going to set the min to 0.0 in https://review.openstack.org/#/c/628205/.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.assertEqual(1, mock_log.warning.call_count)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def test_soft_affinity_weight_multiplier(self):"},{"line_number":122,"context_line":"        self.flags(soft_affinity_weight_multiplier\u003d-1.0,"},{"line_number":123,"context_line":"                   group\u003d\u0027filter_scheduler\u0027)"},{"line_number":124,"context_line":"        host_attr \u003d {\u0027instances\u0027: {\u0027instance1\u0027: mock.sentinel}}"},{"line_number":125,"context_line":"        host1 \u003d fakes.FakeHostState(\u0027fake-host\u0027, \u0027node\u0027, host_attr)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_e14728bc","line":122,"range":{"start_line":122,"start_character":51,"end_line":122,"end_character":55},"in_reply_to":"9fdfeff1_4e18a680","updated":"2019-01-21 06:23:18.000000000","message":"nothing special, I can change it in next PS.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/tests/unit/scheduler/weights/test_weights_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":114,"context_line":"                                                          hostinfo_list, {})"},{"line_number":115,"context_line":"        self.assertEqual([0, -10, -100, -1000],"},{"line_number":116,"context_line":"                         [wh.weight for wh in weights])"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfdaf3ff_c40e578c","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":47},"updated":"2019-01-17 09:02:35.000000000","message":"the number of failed builds are [0, 1, 10, 100] the formula is: -1 * utils.get_weight_multiplier() * failed_builds. Above the weights is set to 1000 in the aggregate, so I think the result should be [0, -1000, -10000, -100000]. What I\u0027m I missing?","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7c7eee8e320b90b7c956cc74215773708d2d0c47","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":114,"context_line":"                                                          hostinfo_list, {})"},{"line_number":115,"context_line":"        self.assertEqual([0, -10, -100, -1000],"},{"line_number":116,"context_line":"                         [wh.weight for wh in weights])"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_1480518b","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":47},"in_reply_to":"bfdaf3ff_96007369","updated":"2019-01-22 09:26:22.000000000","message":"I see now,thanks.","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":114,"context_line":"                                                          hostinfo_list, {})"},{"line_number":115,"context_line":"        self.assertEqual([0, -10, -100, -1000],"},{"line_number":116,"context_line":"                         [wh.weight for wh in weights])"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfdaf3ff_96007369","line":115,"range":{"start_line":115,"start_character":25,"end_line":115,"end_character":47},"in_reply_to":"bfdaf3ff_c40e578c","updated":"2019-01-17 09:24:22.000000000","message":"I guess you were missing the weight normalization in weight [1].\n\nthat means the result is something like: \n-1 * utils.get_weight_multiplier() * (failed_builds / (max - min))\n\n-1 * 1000 * ([0, 1, 10, 100]/(100 - 0))\n\n[0, -10, -100, -1000]\n\n[1] https://github.com/openstack/nova/blob/fdd2c1e/nova/weights.py#L135","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                metadata\u003d{\u0027build_failure_weight_multiplier\u0027: \u00271000\u0027},"},{"line_number":93,"context_line":"            )]"},{"line_number":94,"context_line":"        # If the host is in multiple aggs and there are conflict weight values"},{"line_number":95,"context_line":"        # in the metadata, we will use the min value among them"},{"line_number":96,"context_line":"        self.assertEqual(-500,"},{"line_number":97,"context_line":"                         self.buildfailure_weigher.weight_multiplier(host1))"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_0e0a9e25","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":63},"updated":"2019-01-19 22:57:17.000000000","message":"This one is a bit tricky since it\u0027s actually inversely proportional to the value set, so min could be thought to be -1000, so in that case would we want to pass based_on\u003dmax to validate_num_values?","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                metadata\u003d{\u0027build_failure_weight_multiplier\u0027: \u00271000\u0027},"},{"line_number":93,"context_line":"            )]"},{"line_number":94,"context_line":"        # If the host is in multiple aggs and there are conflict weight values"},{"line_number":95,"context_line":"        # in the metadata, we will use the min value among them"},{"line_number":96,"context_line":"        self.assertEqual(-500,"},{"line_number":97,"context_line":"                         self.buildfailure_weigher.weight_multiplier(host1))"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_646ca608","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":63},"in_reply_to":"9fdfeff1_0e0a9e25","updated":"2019-01-21 06:23:18.000000000","message":"emm, yep, I didn\u0027t notice that before. If we regard this min value for the multipliers is okay, but if we regard this min value for -1 * multipliers, we should change it to based_on\u003dmax.\n\nBut I\u0027m not sure does it make the multiplier config more complex?","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8a613d575769d09045f488f4e5ef2e2979c7b4e4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                metadata\u003d{\u0027build_failure_weight_multiplier\u0027: \u00271000\u0027},"},{"line_number":93,"context_line":"            )]"},{"line_number":94,"context_line":"        # If the host is in multiple aggs and there are conflict weight values"},{"line_number":95,"context_line":"        # in the metadata, we will use the min value among them"},{"line_number":96,"context_line":"        self.assertEqual(-500,"},{"line_number":97,"context_line":"                         self.buildfailure_weigher.weight_multiplier(host1))"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_6d3b2238","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":63},"in_reply_to":"9fdfeff1_646ca608","updated":"2019-01-21 14:53:54.000000000","message":"\u003e But I\u0027m not sure does it make the multiplier config more complex?\n\nYes, it does, which is why I didn\u0027t -1 for it, but it\u0027s something I thought should be mentioned because I could see someone thinking that behavior is backwards for this weigher since it\u0027s an inverse weight.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"109e64bfc49d82e0e4abb736432be613cfb25465","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                metadata\u003d{\u0027build_failure_weight_multiplier\u0027: \u00271000\u0027},"},{"line_number":93,"context_line":"            )]"},{"line_number":94,"context_line":"        # If the host is in multiple aggs and there are conflict weight values"},{"line_number":95,"context_line":"        # in the metadata, we will use the min value among them"},{"line_number":96,"context_line":"        self.assertEqual(-500,"},{"line_number":97,"context_line":"                         self.buildfailure_weigher.weight_multiplier(host1))"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_6d5c824b","line":95,"range":{"start_line":95,"start_character":27,"end_line":95,"end_character":63},"in_reply_to":"9fdfeff1_6d3b2238","updated":"2019-01-21 15:07:32.000000000","message":"As far as I understand this min is the min of the configured values (1000, 500) and not the calculated values (-1000, -500). The config tells me \"how important is to avoid failed hosts\" where a bigger number means more avoidance. Technically it is negated to as weighers express how likely a host will be selected. As the user configures value is used in the min() calculation it is OK to document this a min().","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/tests/unit/scheduler/weights/test_weights_cpu.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # host1: vcpus_free\u003d0"},{"line_number":181,"context_line":"        # host2: vcpus_free\u003d2"},{"line_number":182,"context_line":"        # host3: vcpus_free\u003d6"},{"line_number":183,"context_line":"        # host4: vcpus_free\u003d16"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # so, host4 should win"},{"line_number":186,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfdaf3ff_9a60a603","line":183,"updated":"2019-01-17 09:02:35.000000000","message":"doesn\u0027t it [0, 2, 6, 8 ] * 1.5 \u003d [0, 3, 9, 12] ?","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # host1: vcpus_free\u003d0"},{"line_number":181,"context_line":"        # host2: vcpus_free\u003d2"},{"line_number":182,"context_line":"        # host3: vcpus_free\u003d6"},{"line_number":183,"context_line":"        # host4: vcpus_free\u003d16"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # so, host4 should win"},{"line_number":186,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfdaf3ff_1649e3ce","line":183,"in_reply_to":"bfdaf3ff_9a60a603","updated":"2019-01-17 09:24:22.000000000","message":"Yes","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":187,"context_line":"                                                          hostinfo_list, {})"},{"line_number":188,"context_line":"        weighed_host \u003d weights[0]"},{"line_number":189,"context_line":"        self.assertEqual(1.0 * 1.5, weighed_host.weight)"},{"line_number":190,"context_line":"        self.assertEqual(\u0027host4\u0027, weighed_host.obj.host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_91030f0e","line":189,"range":{"start_line":189,"start_character":25,"end_line":189,"end_character":34},"updated":"2019-01-19 22:57:17.000000000","message":"Why not just 1.5? :) Here and in a couple of other tests.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"364d7237e6f9cd78a26773e158f958dda344e23b","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":187,"context_line":"                                                          hostinfo_list, {})"},{"line_number":188,"context_line":"        weighed_host \u003d weights[0]"},{"line_number":189,"context_line":"        self.assertEqual(1.0 * 1.5, weighed_host.weight)"},{"line_number":190,"context_line":"        self.assertEqual(\u0027host4\u0027, weighed_host.obj.host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4ddadee9","line":189,"range":{"start_line":189,"start_character":25,"end_line":189,"end_character":34},"in_reply_to":"9fdfeff1_4152b469","updated":"2019-01-21 15:00:19.000000000","message":"Ah OK. If you leave it in a code comment would be nice.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        weights \u003d self.weight_handler.get_weighed_objects(self.weighers,"},{"line_number":187,"context_line":"                                                          hostinfo_list, {})"},{"line_number":188,"context_line":"        weighed_host \u003d weights[0]"},{"line_number":189,"context_line":"        self.assertEqual(1.0 * 1.5, weighed_host.weight)"},{"line_number":190,"context_line":"        self.assertEqual(\u0027host4\u0027, weighed_host.obj.host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4152b469","line":189,"range":{"start_line":189,"start_character":25,"end_line":189,"end_character":34},"in_reply_to":"9fdfeff1_91030f0e","updated":"2019-01-21 06:23:18.000000000","message":"it can be 1.5 directly, and it just copy from above test, and I think the original author wants to say:\n\n1.0 (normalized weight) * 1.5 (weight multiplier)","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"nova/weights.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25c81aa3b92afba4955a95556c021d183bd16d21","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    minval \u003d None"},{"line_number":77,"context_line":"    maxval \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":80,"context_line":"        \"\"\"How weighted this weigher should be."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        Override this method in a subclass, so that the returned value is"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_4d218a9f","line":79,"range":{"start_line":79,"start_character":32,"end_line":79,"end_character":42},"updated":"2019-01-03 14:44:06.000000000","message":"document this parameter and how it\u0027s used with the utility method","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"965114185a11142ea9b709c6bef69db020edea5b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    minval \u003d None"},{"line_number":77,"context_line":"    maxval \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":80,"context_line":"        \"\"\"How weighted this weigher should be."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        Override this method in a subclass, so that the returned value is"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffd0ebdf_c0fe9104","line":79,"range":{"start_line":79,"start_character":32,"end_line":79,"end_character":42},"in_reply_to":"ffd0ebdf_4d218a9f","updated":"2019-01-04 06:44:49.000000000","message":"Done","commit_id":"04acda84be2866c38943132f4e1b394df91ae897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    minval \u003d None"},{"line_number":77,"context_line":"    maxval \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":80,"context_line":"        \"\"\"How weighted this weigher should be."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        Override this method in a subclass, so that the returned value is"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_110f1f2f","line":79,"updated":"2019-01-19 22:57:17.000000000","message":"Since this is an interface change, and we support loading out-of-tree weight classes, it would probably be good to send a short email to the mailing list to let operators know we\u0027re making this change. You can link to the spec as well for details.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    minval \u003d None"},{"line_number":77,"context_line":"    maxval \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":80,"context_line":"        \"\"\"How weighted this weigher should be."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        Override this method in a subclass, so that the returned value is"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4473a2e8","line":79,"in_reply_to":"9fdfeff1_110f1f2f","updated":"2019-01-21 06:23:18.000000000","message":"OK will do, thanks for reminder.","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"0273e74c727dd78515472f92f95cbb09dd824412","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    minval \u003d None"},{"line_number":77,"context_line":"    maxval \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def weight_multiplier(self, host_state):"},{"line_number":80,"context_line":"        \"\"\"How weighted this weigher should be."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        Override this method in a subclass, so that the returned value is"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_fbb4ad37","line":79,"in_reply_to":"9fdfeff1_4473a2e8","updated":"2019-01-21 11:40:30.000000000","message":"http://lists.openstack.org/pipermail/openstack-discuss/2019-January/001907.html","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}],"releasenotes/notes/per-aggregate-scheduling-weight-7535fd6e8345034d.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b79dbdc18478b04b1623832864fa060127cd8efc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    AArch64 architecture is supported by Nova with libvirt min version 3.6.0."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"ffd0ebdf_42da9e17","line":1,"updated":"2019-01-04 16:12:43.000000000","message":"This is clearly a copied release note and is wrong.","commit_id":"ad0cfcf225ed21063aa59e483ba76bfabfdf8124"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    This patch adds the ability to allow users to use"},{"line_number":5,"context_line":"    ``Aggregate``\u0027s ``metadata`` to override the global config options"},{"line_number":6,"context_line":"    for weights to achieve more fine-grained control over resource"},{"line_number":7,"context_line":"    weights."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"dfd5e7cf_f92ca69a","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":14},"updated":"2019-01-08 12:29:21.000000000","message":"remove this","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found, "},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.disk_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host, the minimum value will be used."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"dfd5e7cf_f903460c","line":11,"range":{"start_line":11,"start_character":76,"end_line":11,"end_character":77},"updated":"2019-01-08 12:29:21.000000000","message":"typo","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4249370dd72abb2a51aad525e780c0ebdfbf268c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found, "},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.disk_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host, the minimum value will be used."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"dfd5e7cf_7938b6d2","line":13,"range":{"start_line":13,"start_character":47,"end_line":13,"end_character":70},"updated":"2019-01-08 12:29:21.000000000","message":"cpu","commit_id":"351f2a64a4d85a42a9b4d06e37dc114e6c01a78d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ec818ed95053a76ab45b30de186d56e1519a8af","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host, the minimum value will be used."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"dfd5e7cf_fdd00053","line":14,"range":{"start_line":13,"start_character":70,"end_line":14,"end_character":76},"updated":"2019-01-09 03:28:15.000000000","message":"I just noticed that what you actually did is that if more than one value is found in aggregate metadata, then the minimum value is used, so that did not include the config value. Should be more accurate here.","commit_id":"0637c5957a23eed1cedcf3d42b5bf6a7ca08d50d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_166ec394","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":63},"updated":"2019-01-17 09:02:35.000000000","message":"multiplier","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_b65d77ea","line":10,"range":{"start_line":10,"start_character":26,"end_line":10,"end_character":34},"updated":"2019-01-17 09:02:35.000000000","message":"multiply it","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_965ab3f0","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":20},"updated":"2019-01-17 09:02:35.000000000","message":"on the compute node","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_76686f20","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":63},"in_reply_to":"bfdaf3ff_166ec394","updated":"2019-01-17 09:24:22.000000000","message":"Done","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_566d2b30","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":20},"in_reply_to":"bfdaf3ff_965ab3f0","updated":"2019-01-17 09:24:22.000000000","message":"Done","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_b686d7da","line":10,"range":{"start_line":10,"start_character":26,"end_line":10,"end_character":34},"in_reply_to":"bfdaf3ff_b65d77ea","updated":"2019-01-17 09:24:22.000000000","message":"Done","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37d4e3d27ac1cd124659999064f7bdda878bd553","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_3669878a","line":12,"range":{"start_line":12,"start_character":50,"end_line":12,"end_character":60},"updated":"2019-01-17 09:02:35.000000000","message":"multiplier","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f24c7382e190b4c79916eccc3c78a3570d1c8f6e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    the compute node, and mulitplt by the cpu weight multipiler. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multipiler\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multipiler. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bfdaf3ff_968393cc","line":12,"range":{"start_line":12,"start_character":50,"end_line":12,"end_character":60},"in_reply_to":"bfdaf3ff_3669878a","updated":"2019-01-17 09:24:22.000000000","message":"Done","commit_id":"545523a7d25bac319ff6d222ce70632be4d2f33d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the ability to allow users to use"},{"line_number":5,"context_line":"    ``Aggregate``\u0027s ``metadata`` to override the global config options"},{"line_number":6,"context_line":"    for weights to achieve more fine-grained control over resource"},{"line_number":7,"context_line":"    weights."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_d118b776","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":8},"updated":"2019-01-19 22:57:17.000000000","message":"This reads like a commit message, which has context for a single change, but release notes are published together, so something like \"(This) adds the ability\" is a bit confusing. I would just say \"Added the ability...\".","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the ability to allow users to use"},{"line_number":5,"context_line":"    ``Aggregate``\u0027s ``metadata`` to override the global config options"},{"line_number":6,"context_line":"    for weights to achieve more fine-grained control over resource"},{"line_number":7,"context_line":"    weights."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_e14e48c0","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":8},"in_reply_to":"9fdfeff1_d118b776","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    for weights to achieve more fine-grained control over resource"},{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_71278bb8","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":43},"updated":"2019-01-19 22:57:17.000000000","message":"weighs","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    for weights to achieve more fine-grained control over resource"},{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_e4e3b6a3","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":43},"in_reply_to":"9fdfeff1_71278bb8","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_912c6f9a","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":37},"updated":"2019-01-19 22:57:17.000000000","message":"multiplies","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    weights."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_44d722c1","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":37},"in_reply_to":"9fdfeff1_912c6f9a","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_512607ba","line":12,"range":{"start_line":12,"start_character":24,"end_line":12,"end_character":31},"updated":"2019-01-19 22:57:17.000000000","message":"chosen","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Such as, for the CPUWeigher, it weights hosts based on available vCPUs"},{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_24da1ee9","line":12,"range":{"start_line":12,"start_character":24,"end_line":12,"end_character":31},"in_reply_to":"9fdfeff1_512607ba","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb6f4241a22fd7ab8955162719509929087b3a3e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_f13a9bcb","line":13,"range":{"start_line":13,"start_character":26,"end_line":13,"end_character":69},"updated":"2019-01-19 22:57:17.000000000","message":"\"CONF\" is code-speak. The pattern for docs is:\n\n``[filter_scheduler]/cpu_weight_multiplier``","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b8b24a77ff03c40fe70488d11032b051c034c022","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    on the compute node, and multiply it by the cpu weight multiplier. If"},{"line_number":11,"context_line":"    per-aggregate value (which the key is \"cpu_weight_multiplier\") is found,"},{"line_number":12,"context_line":"    this value would be choosen as the cpu weight multiplier. Otherwise, it"},{"line_number":13,"context_line":"    will fall back to the CONF.filter_scheduler.cpu_weight_multiplier. If"},{"line_number":14,"context_line":"    more than one value is found for a host in aggregate metadata, the minimum"},{"line_number":15,"context_line":"    value will be used."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9fdfeff1_84d50abc","line":13,"range":{"start_line":13,"start_character":26,"end_line":13,"end_character":69},"in_reply_to":"9fdfeff1_f13a9bcb","updated":"2019-01-21 06:23:18.000000000","message":"Done","commit_id":"94605380e00d0f433d4e66880e98e313f9ec5fb3"}]}
