)]}'
{"doc/source/admin/configuration/schedulers.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecfbcf491b07d7c6a555b1cc6731059de838a452","unresolved":false,"context_lines":[{"line_number":822,"context_line":"     - Multiplier used for weighing hosts for group soft-anti-affinity.  Only a"},{"line_number":823,"context_line":"       positive value is meaningful. Negative means that the behavior will"},{"line_number":824,"context_line":"       change to the opposite, which is soft-affinity."},{"line_number":825,"context_line":"   * - [DEFAULT]"},{"line_number":826,"context_line":"     - ``build_failure_weight_multiplier``"},{"line_number":827,"context_line":"     - Multiplier used for weighing hosts which have recent build failures. A"},{"line_number":828,"context_line":"       positive value increases the significance of build falures reported by"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_34b440f2","line":825,"range":{"start_line":825,"start_character":8,"end_line":825,"end_character":15},"updated":"2018-06-06 22:06:32.000000000","message":"filter_scheduler","commit_id":"458f25f893db4d660ebc2a36f8e406e8cfece771"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                CONF.max_concurrent_live_migrations)"},{"line_number":526,"context_line":"        else:"},{"line_number":527,"context_line":"            self._live_migration_semaphore \u003d compute_utils.UnlimitedSemaphore()"},{"line_number":528,"context_line":"        self._failed_builds \u003d 0"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        super(ComputeManager, self).__init__(service_name\u003d\"compute\","},{"line_number":531,"context_line":"                                             *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_dd044d1b","side":"PARENT","line":528,"updated":"2018-06-04 19:55:19.000000000","message":"RT will default to zero the first time it does an update because it does a self.stats.get(\u0027failed_builds\u0027, 0), so restarting a compute will reset the counter.","commit_id":"f902e0d5d87fb05207e4a7aca73d185775d43df2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"    def _build_failed(self):"},{"line_number":1679,"context_line":"        limit \u003d CONF.compute.consecutive_build_service_disable_threshold"},{"line_number":1680,"context_line":"        admin_ctx \u003d nova.context.get_admin_context()"},{"line_number":1681,"context_line":"        if limit:"},{"line_number":1682,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1683,"context_line":"            rt.stats.boot_failed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_d83448af","line":1680,"range":{"start_line":1680,"start_character":8,"end_line":1680,"end_character":52},"updated":"2018-06-05 14:20:47.000000000","message":"This isn\u0027t used if limit is 0.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"    def _build_succeeded(self):"},{"line_number":1687,"context_line":"        limit \u003d CONF.compute.consecutive_build_service_disable_threshold"},{"line_number":1688,"context_line":"        rt \u003d self._get_resource_tracker()"},{"line_number":1689,"context_line":"        rt.stats.boot_succeeded()"},{"line_number":1690,"context_line":"        if limit:"},{"line_number":1691,"context_line":"            # NOTE(danms): If not configured to report failed builds, avoid"},{"line_number":1692,"context_line":"            # updating the DB again"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_983ed089","line":1689,"range":{"start_line":1688,"start_character":8,"end_line":1689,"end_character":33},"updated":"2018-06-05 14:20:47.000000000","message":"Why not move this into the limit conditional?","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e73668b8bee6d2020e717c9a44f1c7b6b51fd26e","unresolved":false,"context_lines":[{"line_number":1690,"context_line":"        if limit:"},{"line_number":1691,"context_line":"            # NOTE(danms): If not configured to report failed builds, avoid"},{"line_number":1692,"context_line":"            # updating the DB again"},{"line_number":1693,"context_line":"            self.update_available_resource(nova.context.get_admin_context())"},{"line_number":1694,"context_line":""},{"line_number":1695,"context_line":"    @wrap_exception()"},{"line_number":1696,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_b8162c55","line":1693,"updated":"2018-06-05 14:36:44.000000000","message":"Idea: we could avoid the obligatory update here, and just depend on the next update of the resource tracker to send the new stats. That would be within the next 60s by default, could be longer if configured, but would also happen the next time an instance failed and we updated the RT as part of that process.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57522ac9ddb7c07f79044e8b3953a12a43be7b30","unresolved":false,"context_lines":[{"line_number":1690,"context_line":"        if limit:"},{"line_number":1691,"context_line":"            # NOTE(danms): If not configured to report failed builds, avoid"},{"line_number":1692,"context_line":"            # updating the DB again"},{"line_number":1693,"context_line":"            self.update_available_resource(nova.context.get_admin_context())"},{"line_number":1694,"context_line":""},{"line_number":1695,"context_line":"    @wrap_exception()"},{"line_number":1696,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5b48322d","line":1693,"in_reply_to":"5f7c97a3_b8162c55","updated":"2018-06-05 14:45:16.000000000","message":"Yeah that makes sense and makes this less chatty - RT.instance_claim on the next instance will update the compute node record in the DB.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"169ff157b577bfd5923a466cbe178990381e4bc6","unresolved":false,"context_lines":[{"line_number":1676,"context_line":"        return block_device_info"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"    def _build_failed(self):"},{"line_number":1679,"context_line":"        if CONF.compute.consecutive_build_service_disable_threshold:"},{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_bc9fe063","line":1679,"range":{"start_line":1679,"start_character":58,"end_line":1679,"end_character":67},"updated":"2018-06-06 15:58:07.000000000","message":"Technically, this is no longer a threshold, just a boolean. \nI think we should somehow keep track of the failed builds and emit a notification if that counter is above the threshold so that an external service could still disable the compute if operators want to.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28b15140ebf56ed5174d90e1b1c4d73b7d099a1a","unresolved":false,"context_lines":[{"line_number":1676,"context_line":"        return block_device_info"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"    def _build_failed(self):"},{"line_number":1679,"context_line":"        if CONF.compute.consecutive_build_service_disable_threshold:"},{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_dfd3ae5e","line":1679,"range":{"start_line":1679,"start_character":58,"end_line":1679,"end_character":67},"in_reply_to":"5f7c97a3_bc9fe063","updated":"2018-06-06 16:21:59.000000000","message":"Correct, but we\u0027re doing this for backportability and honoring the intent of the existing config. I think after this, we\u0027ll just always report this value and let the scheduler decide what to do with the data, but if people have disabled this in their compute configs, we need to not suddenly re-enable it in a backport.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"169ff157b577bfd5923a466cbe178990381e4bc6","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"},{"line_number":1683,"context_line":"            rt.stats.build_failed()"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def _build_succeeded(self):"},{"line_number":1686,"context_line":"        rt \u003d self._get_resource_tracker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_fceeb8eb","line":1683,"updated":"2018-06-06 15:58:07.000000000","message":"Even if I understand the fact that we are about to stop automatically disabling computes, I feel that we need to clearly communicate that the option will totally do things differently.\n\nAnd as I know you want to backport that, I wonder if we should maybe split this in twice, one being the fact that we populate the stats based on failed builds, and the other one be the option behavioural change that is more debatable for backporting.\n\nAfter all, we could just backport the stats population and the weigher, and ask operators to disable  CONF.compute.consecutive_build_service_disable_threshold in Queens if they think there is a security risk.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"},{"line_number":1683,"context_line":"            rt.stats.build_failed()"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def _build_succeeded(self):"},{"line_number":1686,"context_line":"        rt \u003d self._get_resource_tracker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_30ea11d8","line":1683,"in_reply_to":"5f7c97a3_ba104002","updated":"2018-06-06 18:46:04.000000000","message":"The auto-disable feature can be considered incomplete because of the related bug since it\u0027s not sophisticated enough to distinguish the different types of build failures which should count toward auto-disabling the compute, so people that are relying on that probably don\u0027t know what kind of trap laid in wait for them.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28b15140ebf56ed5174d90e1b1c4d73b7d099a1a","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"},{"line_number":1683,"context_line":"            rt.stats.build_failed()"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def _build_succeeded(self):"},{"line_number":1686,"context_line":"        rt \u003d self._get_resource_tracker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ffbd4a02","line":1683,"in_reply_to":"5f7c97a3_fceeb8eb","updated":"2018-06-06 16:21:59.000000000","message":"The goal here is to not require operators to change anything in config as part of this backport and continue to behave as much the same as possible.\n\nI think the reno covers the situation sufficiently, but if not, please make suggestions to that.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24345e53c44c27906d903022163dbcb29f662d28","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"            rt \u003d self._get_resource_tracker()"},{"line_number":1681,"context_line":"            # NOTE(danms): Update our counter, but wait for the next"},{"line_number":1682,"context_line":"            # update_available_resource() periodic to flush it to the DB"},{"line_number":1683,"context_line":"            rt.stats.build_failed()"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def _build_succeeded(self):"},{"line_number":1686,"context_line":"        rt \u003d self._get_resource_tracker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_ba104002","line":1683,"in_reply_to":"5f7c97a3_ffbd4a02","updated":"2018-06-06 17:04:42.000000000","message":"What I feel is that operators will suddently discover when they upgrade their queens stable release that the autodisable feature just disappeared (because Nova won\u0027t longer do the out-of-rotation automatic thing).\n\nI\u0027m not saying it\u0027s super dramatic, it\u0027s just that I feel decoupling the changes would help make things clearer to folks that don\u0027t get the whole context.\n\nEither way, I\u0027m not super opinionated, you know.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\"Copy resource values to supplied compute_node.\"\"\""},{"line_number":606,"context_line":"        # purge old stats and init with anything passed in by the driver"},{"line_number":607,"context_line":"        # NOTE(danms): Preserve \u0027failed_boots\u0027 across the stats clearing,"},{"line_number":608,"context_line":"        # as that is not part of resources"},{"line_number":609,"context_line":"        prev_failed_boots \u003d self.stats.get(\u0027failed_boots\u0027, 0)"},{"line_number":610,"context_line":"        self.stats.clear()"},{"line_number":611,"context_line":"        self.stats[\u0027failed_boots\u0027] \u003d prev_failed_boots"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_58060b1f","line":608,"updated":"2018-06-04 19:55:19.000000000","message":"This is kindof ugly, but necessary if we\u0027re going to re-use stats for this purpose. In master we can add a column for this count so we don\u0027t have to do this, but it\u0027d be a much nastier backport. So, do this for the backportable one.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\"Copy resource values to supplied compute_node.\"\"\""},{"line_number":606,"context_line":"        # purge old stats and init with anything passed in by the driver"},{"line_number":607,"context_line":"        # NOTE(danms): Preserve \u0027failed_boots\u0027 across the stats clearing,"},{"line_number":608,"context_line":"        # as that is not part of resources"},{"line_number":609,"context_line":"        prev_failed_boots \u003d self.stats.get(\u0027failed_boots\u0027, 0)"},{"line_number":610,"context_line":"        self.stats.clear()"},{"line_number":611,"context_line":"        self.stats[\u0027failed_boots\u0027] \u003d prev_failed_boots"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_f86264ad","line":608,"in_reply_to":"5f7c97a3_58060b1f","updated":"2018-06-05 14:20:47.000000000","message":"I\u0027d leave that comment as a TODO in the code.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"}],"nova/compute/stats.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        return (vm_state, task_state, os_type, project_id)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def boot_failed(self):"},{"line_number":143,"context_line":"        self[\u0027failed_boots\u0027] \u003d self.get(\u0027failed_boots\u0027, 0) + 1"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def boot_succeeded(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_58711877","line":142,"range":{"start_line":142,"start_character":8,"end_line":142,"end_character":19},"updated":"2018-06-05 14:20:47.000000000","message":"nit: I\u0027d use \u0027build\u0027 over \u0027boot\u0027 throughout since that\u0027s the flow used in the compute manager - boot is just the nova CLI name for this operation.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def boot_succeeded(self):"},{"line_number":146,"context_line":"        # FIXME(danms): Make this more graceful, either by time-based aging or"},{"line_number":147,"context_line":"        # a fixed decline upon success"},{"line_number":148,"context_line":"        self[\u0027failed_boots\u0027] \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1810934f","line":148,"updated":"2018-06-04 19:55:19.000000000","message":"Principle of minimum change for stable, so reset on success for now.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"}],"nova/conf/compute.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecfbcf491b07d7c6a555b1cc6731059de838a452","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"Related options:"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"* [scheduler]/build_failure_weight_multiplier"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"\"\"\"),"},{"line_number":627,"context_line":"    cfg.IntOpt(\"shutdown_retry_interval\","}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_54ac5c9e","line":624,"range":{"start_line":624,"start_character":3,"end_line":624,"end_character":12},"updated":"2018-06-06 22:06:32.000000000","message":"filter_scheduler","commit_id":"458f25f893db4d660ebc2a36f8e406e8cfece771"}],"nova/conf/scheduler.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":495,"context_line":"  weigher."},{"line_number":496,"context_line":"\"\"\"),"},{"line_number":497,"context_line":"    cfg.FloatOpt("},{"line_number":498,"context_line":"        \"boot_failure_weight_multiplier\","},{"line_number":499,"context_line":"        default\u003d\"1000000.0\","},{"line_number":500,"context_line":"        help\u003d\"\"\""},{"line_number":501,"context_line":"Multiplier used for weighing hosts that have had recent build failures."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_b8114c07","line":498,"range":{"start_line":498,"start_character":9,"end_line":498,"end_character":13},"updated":"2018-06-05 14:20:47.000000000","message":"build","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":503,"context_line":"This option determines how much weight is placed on a compute node with"},{"line_number":504,"context_line":"recent boot failures. Boot failures may indicate a failing, misconfigured, or"},{"line_number":505,"context_line":"otherwise ailing compute node, and avoiding it during scheduling may be"},{"line_number":506,"context_line":"beneficial. The weight is inversely proportional to the number of recent"},{"line_number":507,"context_line":"build failures the compute node has experienced. This value should be"},{"line_number":508,"context_line":"set to some high value to offset weight given by other enabled weighers"},{"line_number":509,"context_line":"due to available resources. To disable weighing compute hosts by the"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_782427b0","line":506,"range":{"start_line":506,"start_character":12,"end_line":506,"end_character":48},"updated":"2018-06-04 19:55:19.000000000","message":"I think this is the first such inverted weight we have. We could make the user remember to configure this to be negative, but I don\u0027t think it\u0027s worth it. They\u0027re used to increasing the absolute value of these to make a given thing \"more important\", so I think internally inverting the weight scale is appropriate.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":513,"context_line":"a different scheduler, this option has no effect."},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"Possible values:"},{"line_number":516,"context_line":"* An integer or float value, where the value corresponds to the multiplier"},{"line_number":517,"context_line":"  ratio for this weigher."},{"line_number":518,"context_line":"\"\"\"),"},{"line_number":519,"context_line":"    cfg.BoolOpt("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_180080ab","line":516,"updated":"2018-06-05 14:20:47.000000000","message":"Need a blank line before the bullet list for rst rendering.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2241f308dffe090c9a12690b256bea09b3dc949b","unresolved":false,"context_lines":[{"line_number":515,"context_line":"Possible values:"},{"line_number":516,"context_line":"* An integer or float value, where the value corresponds to the multiplier"},{"line_number":517,"context_line":"  ratio for this weigher."},{"line_number":518,"context_line":"\"\"\"),"},{"line_number":519,"context_line":"    cfg.BoolOpt("},{"line_number":520,"context_line":"        \"shuffle_best_same_weighed_hosts\","},{"line_number":521,"context_line":"        default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_38169cf3","line":518,"updated":"2018-06-05 14:20:47.000000000","message":"Add:\n\nRelated options:\n\n* [compute]/consecutive_build_service_disable_threshold - some words about how it\u0027s related","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"76e3c4c43e1535502d988ed1fd91b5ff81a31e4b","unresolved":false,"context_lines":[{"line_number":494,"context_line":"  meaningful, as negative values would make this behave as a soft affinity"},{"line_number":495,"context_line":"  weigher."},{"line_number":496,"context_line":"\"\"\"),"},{"line_number":497,"context_line":"    cfg.FloatOpt("},{"line_number":498,"context_line":"        \"build_failure_weight_multiplier\","},{"line_number":499,"context_line":"        default\u003d\"1000000.0\","},{"line_number":500,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_1444a418","line":497,"updated":"2018-06-06 21:56:37.000000000","message":"Should there be a min value on this? What happens if it\u0027s set to -10000000? Then we\u0027ll weigh failed hosts to always be picked first right? Would that make any sense?","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab428073fb95c2cec518eec6889c1189eb2663f0","unresolved":false,"context_lines":[{"line_number":494,"context_line":"  meaningful, as negative values would make this behave as a soft affinity"},{"line_number":495,"context_line":"  weigher."},{"line_number":496,"context_line":"\"\"\"),"},{"line_number":497,"context_line":"    cfg.FloatOpt("},{"line_number":498,"context_line":"        \"build_failure_weight_multiplier\","},{"line_number":499,"context_line":"        default\u003d\"1000000.0\","},{"line_number":500,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d4fb8cbb","line":497,"in_reply_to":"5f7c97a3_1444a418","updated":"2018-06-06 22:00:21.000000000","message":"Not, IMHO, in case anyone wants to choose recently failed hosts more often. Maybe they have lots of transient failures and want to choose ones that recently failed. Or maybe I do my own auto-disable, and once I fix and enable a host, I want it front and center for new builds.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":495,"context_line":"  weigher."},{"line_number":496,"context_line":"\"\"\"),"},{"line_number":497,"context_line":"    cfg.FloatOpt("},{"line_number":498,"context_line":"        \"build_failure_weight_multiplier\","},{"line_number":499,"context_line":"        default\u003d\"1000000.0\","},{"line_number":500,"context_line":"        help\u003d\"\"\""},{"line_number":501,"context_line":"Multiplier used for weighing hosts that have had recent build failures."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f02fb93b","line":498,"updated":"2018-06-06 18:46:04.000000000","message":"We should also mention this in the admin scheduler docs:\n\nhttps://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#id15","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"44beefeab7ea4fb98533c1676edd4411d6ce7d26","unresolved":false,"context_lines":[{"line_number":496,"context_line":"\"\"\"),"},{"line_number":497,"context_line":"    cfg.FloatOpt("},{"line_number":498,"context_line":"        \"build_failure_weight_multiplier\","},{"line_number":499,"context_line":"        default\u003d\"1000000.0\","},{"line_number":500,"context_line":"        help\u003d\"\"\""},{"line_number":501,"context_line":"Multiplier used for weighing hosts that have had recent build failures."},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_34ca00a1","line":499,"range":{"start_line":499,"start_character":16,"end_line":499,"end_character":27},"updated":"2018-06-06 21:54:37.000000000","message":"Just realized this should be a float, not a string.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Related options:"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"* [compute]/consecutive_build_service_disable_threshold - Must be nonzero to"},{"line_number":523,"context_line":"  enable updates of this value from the compute nodes."},{"line_number":524,"context_line":"\"\"\"),"},{"line_number":525,"context_line":"    cfg.BoolOpt("}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_b0294138","line":522,"range":{"start_line":522,"start_character":12,"end_line":522,"end_character":55},"updated":"2018-06-06 18:46:04.000000000","message":"We should mention build_failure_weight_multiplier as a related option from the help for consecutive_build_service_disable_threshold.\n\nThe wording on consecutive_build_service_disable_threshold should likely also change since it talks about auto-disable which no longer happens.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":520,"context_line":"Related options:"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"* [compute]/consecutive_build_service_disable_threshold - Must be nonzero to"},{"line_number":523,"context_line":"  enable updates of this value from the compute nodes."},{"line_number":524,"context_line":"\"\"\"),"},{"line_number":525,"context_line":"    cfg.BoolOpt("},{"line_number":526,"context_line":"        \"shuffle_best_same_weighed_hosts\","}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_30bf71ab","line":523,"range":{"start_line":523,"start_character":20,"end_line":523,"end_character":30},"updated":"2018-06-06 18:46:04.000000000","message":"This is a bit confusing. The point is that consecutive_build_service_disable_threshold must be non-zero for a given compute host to be considered by the weigher, so maybe just say that?","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab428073fb95c2cec518eec6889c1189eb2663f0","unresolved":false,"context_lines":[{"line_number":520,"context_line":"Related options:"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"* [compute]/consecutive_build_service_disable_threshold - Must be nonzero to"},{"line_number":523,"context_line":"  enable updates of this value from the compute nodes."},{"line_number":524,"context_line":"\"\"\"),"},{"line_number":525,"context_line":"    cfg.BoolOpt("},{"line_number":526,"context_line":"        \"shuffle_best_same_weighed_hosts\","}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d1a4fe4d","line":523,"range":{"start_line":523,"start_character":20,"end_line":523,"end_character":30},"in_reply_to":"5f7c97a3_30bf71ab","updated":"2018-06-06 22:00:21.000000000","message":"I thought I did, but I\u0027ll use your words.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"}],"nova/scheduler/weights/compute.py":[{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"e09294e3eb04c897688c71762f648187f2484de8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"BootFailure Weigher. Weigh hosts by the number of recent failed boot attempts."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a67fcf64","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":11},"updated":"2018-06-06 14:42:17.000000000","message":"BuildFailure here, but not-a-big-deal","commit_id":"98d0f9d6f494954f72cf565c992fec187db4b1bb"}],"nova/test.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        # FIXME(danms): Disable this for all tests by default to avoid breaking"},{"line_number":339,"context_line":"        # any that depend on default/previous ordering"},{"line_number":340,"context_line":"        self.flags(boot_failure_weight_multiplier\u003d0.0,"},{"line_number":341,"context_line":"                   group\u003d\u0027filter_scheduler\u0027)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def _setup_cells(self):"},{"line_number":344,"context_line":"        \"\"\"Setup a normal cellsv2 environment."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7d3df9db","line":341,"updated":"2018-06-04 19:55:19.000000000","message":"This avoids changing the order we find hosts in, which I think is safer especially for a backport. I can follow up with removing this and fixing any tests that seem broken.","commit_id":"110cc64e1966454a23dd0db51402c7f3b7c8e149"}],"nova/tests/functional/api_sample_tests/test_evacuate.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b85505e9dbdc26efb90b2e85354780a3d754793b","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        }"},{"line_number":173,"context_line":"        self._test_evacuate(req_subs, \u0027server-evacuate-req\u0027,"},{"line_number":174,"context_line":"                            server_resp\u003dNone, expected_resp_code\u003d200)"},{"line_number":175,"context_line":"        self.assertEqual(0, compute_node_get_all_by_host.call_count)"},{"line_number":176,"context_line":"        rebuild_mock.assert_called_once_with(mock.ANY, instance\u003dmock.ANY,"},{"line_number":177,"context_line":"                orig_image_ref\u003dmock.ANY, image_ref\u003dmock.ANY,"},{"line_number":178,"context_line":"                injected_files\u003dmock.ANY, new_pass\u003d\"MySecretPass\","}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5d111d5d","side":"PARENT","line":175,"updated":"2018-06-04 19:55:19.000000000","message":"I think that this kind of assertion in a functional test is broken anyway, and I\u0027m not really sure what it was even trying to assert. However, since we\u0027re calling the RT\u0027s update method from a new place, this breaks (which makes my point).","commit_id":"f902e0d5d87fb05207e4a7aca73d185775d43df2"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self.assertEqual(2, fails)"},{"line_number":223,"context_line":"        self._run_periodics()"},{"line_number":224,"context_line":"        self.assertEqual("},{"line_number":225,"context_line":"            [1, 1], list(self._get_node_build_failures().values()))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_create_server_with_error_with_no_retries(self):"},{"line_number":228,"context_line":"        self.flags(max_attempts\u003d1, group\u003d\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_10f2759b","line":225,"range":{"start_line":225,"start_character":12,"end_line":225,"end_character":18},"updated":"2018-06-06 18:46:04.000000000","message":"OK so we retried to a 2nd host which also failed, so the fail count is 1 for each host that was tried.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        self.assertEqual(1, fails)"},{"line_number":231,"context_line":"        self._run_periodics()"},{"line_number":232,"context_line":"        self.assertEqual("},{"line_number":233,"context_line":"            [0, 1], list(sorted(self._get_node_build_failures().values())))"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def test_create_and_delete_server(self):"},{"line_number":236,"context_line":"        # Creates and deletes a server."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9033e562","line":233,"range":{"start_line":233,"start_character":12,"end_line":233,"end_character":18},"updated":"2018-06-06 18:46:04.000000000","message":"no retry, so only one failed host","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"}],"nova/tests/unit/scheduler/weights/test_weights_compute.py":[{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"e09294e3eb04c897688c71762f648187f2484de8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"Tests For Scheduler RAM weights."},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.scheduler import weights"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6691b79a","line":14,"range":{"start_line":14,"start_character":10,"end_line":14,"end_character":31},"updated":"2018-06-06 14:42:17.000000000","message":"This should probably be updated.","commit_id":"98d0f9d6f494954f72cf565c992fec187db4b1bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.weight_handler \u003d weights.HostWeightHandler()"},{"line_number":27,"context_line":"        self.weighers \u003d [compute.BuildFailureWeigher()]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_weighed_host(self, hosts, weight_properties\u003dNone):"},{"line_number":30,"context_line":"        if weight_properties is None:"},{"line_number":31,"context_line":"            weight_properties \u003d {}"},{"line_number":32,"context_line":"        return self.weight_handler.get_weighed_objects(self.weighers,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f07a59ee","line":29,"range":{"start_line":29,"start_character":39,"end_line":29,"end_character":56},"updated":"2018-06-06 18:46:04.000000000","message":"This is never set.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"042ad50ebdd042d5d8d3f948fbfbc0a3f00dc941","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.weight_handler \u003d weights.HostWeightHandler()"},{"line_number":27,"context_line":"        self.weighers \u003d [compute.BuildFailureWeigher()]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_weighed_host(self, hosts, weight_properties\u003dNone):"},{"line_number":30,"context_line":"        if weight_properties is None:"},{"line_number":31,"context_line":"            weight_properties \u003d {}"},{"line_number":32,"context_line":"        return self.weight_handler.get_weighed_objects(self.weighers,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f186daba","line":29,"range":{"start_line":29,"start_character":39,"end_line":29,"end_character":56},"in_reply_to":"5f7c97a3_f07a59ee","updated":"2018-06-06 21:37:52.000000000","message":"That\u0027s because I copied this from a thing :)","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecfbcf491b07d7c6a555b1cc6731059de838a452","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.weight_handler \u003d weights.HostWeightHandler()"},{"line_number":27,"context_line":"        self.weighers \u003d [compute.BuildFailureWeigher()]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_weighed_host(self, hosts, weight_properties\u003dNone):"},{"line_number":30,"context_line":"        if weight_properties is None:"},{"line_number":31,"context_line":"            weight_properties \u003d {}"},{"line_number":32,"context_line":"        return self.weight_handler.get_weighed_objects(self.weighers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_b49cd06a","line":29,"range":{"start_line":29,"start_character":39,"end_line":29,"end_character":56},"updated":"2018-06-06 22:06:32.000000000","message":"This isn\u0027t used.","commit_id":"458f25f893db4d660ebc2a36f8e406e8cfece771"}],"releasenotes/notes/change-consecutive-boot-failure-counter-to-weigher-428de7da0ed2033a.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"169ff157b577bfd5923a466cbe178990381e4bc6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    To mitigate potential issues with compute nodes disabling"},{"line_number":5,"context_line":"    themselves in response to failures that were either non-fatal or"},{"line_number":6,"context_line":"    user-generated, the consecutive build failure counter"},{"line_number":7,"context_line":"    functionality in the compute service has been changed to advise"},{"line_number":8,"context_line":"    the scheduler of the count instead of self-disabling the service"},{"line_number":9,"context_line":"    upon exceeding the threshold. The"},{"line_number":10,"context_line":"    ``[compute]/consecutive_build_service_disable_threshold``"},{"line_number":11,"context_line":"    configuration option still controls whether the count is tracked,"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_5cd6cc55","line":8,"range":{"start_line":6,"start_character":19,"end_line":8,"end_character":17},"updated":"2018-06-06 15:58:07.000000000","message":"that looks like a behavioural change that should also be documented in the \"upgrade\" section, or operators could miss they no longer have auto-disable in Nova.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24345e53c44c27906d903022163dbcb29f662d28","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    To mitigate potential issues with compute nodes disabling"},{"line_number":5,"context_line":"    themselves in response to failures that were either non-fatal or"},{"line_number":6,"context_line":"    user-generated, the consecutive build failure counter"},{"line_number":7,"context_line":"    functionality in the compute service has been changed to advise"},{"line_number":8,"context_line":"    the scheduler of the count instead of self-disabling the service"},{"line_number":9,"context_line":"    upon exceeding the threshold. The"},{"line_number":10,"context_line":"    ``[compute]/consecutive_build_service_disable_threshold``"},{"line_number":11,"context_line":"    configuration option still controls whether the count is tracked,"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_da997cd0","line":8,"range":{"start_line":6,"start_character":19,"end_line":8,"end_character":17},"in_reply_to":"5f7c97a3_1f4e0638","updated":"2018-06-06 17:04:42.000000000","message":"You\u0027re correct, I was wrong. The \u0027features\u0027 section is more appropriate given we can\u0027t use \u0027deprecations\u0027 as the option isn\u0027t deprecated.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28b15140ebf56ed5174d90e1b1c4d73b7d099a1a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    To mitigate potential issues with compute nodes disabling"},{"line_number":5,"context_line":"    themselves in response to failures that were either non-fatal or"},{"line_number":6,"context_line":"    user-generated, the consecutive build failure counter"},{"line_number":7,"context_line":"    functionality in the compute service has been changed to advise"},{"line_number":8,"context_line":"    the scheduler of the count instead of self-disabling the service"},{"line_number":9,"context_line":"    upon exceeding the threshold. The"},{"line_number":10,"context_line":"    ``[compute]/consecutive_build_service_disable_threshold``"},{"line_number":11,"context_line":"    configuration option still controls whether the count is tracked,"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_1f4e0638","line":8,"range":{"start_line":6,"start_character":19,"end_line":8,"end_character":17},"in_reply_to":"5f7c97a3_5cd6cc55","updated":"2018-06-06 16:21:59.000000000","message":"Things in the upgrade section are tasks for the operator, right? Since this is aiming at being compatible with the previous behavior (albeit without fully disabling computes), there\u0027s not likely anything they will need to do as part of this. There will be when we finish this in master, changing the semantics of the disable threshold for real.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e53936851290d359436a27a6d1851b0b092526","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    ``[filter_scheduler]/build_failure_weight_multiplier`` option. If"},{"line_number":16,"context_line":"    the compute threshold option is nonzero, computes will report their"},{"line_number":17,"context_line":"    failure count for the scheduler to consider. If the threshold"},{"line_number":18,"context_line":"    value is zero or unset, then computes will not report this value"},{"line_number":19,"context_line":"    and the scheduler will assume the number of failures for"},{"line_number":20,"context_line":"    non-reporting compute nodes to be zero. By default, the scheduler"},{"line_number":21,"context_line":"    weigher is enabled and configured with a very large multiplier to"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_b05dc17a","line":18,"range":{"start_line":18,"start_character":18,"end_line":18,"end_character":26},"updated":"2018-06-06 18:46:04.000000000","message":"If unset, the default is 10 so it is set - the only way to disable is by setting the threshold to 0.","commit_id":"6b88945eb2d702fda351870f26345e17c3154bc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecfbcf491b07d7c6a555b1cc6731059de838a452","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    ``[filter_scheduler]/build_failure_weight_multiplier`` option. If"},{"line_number":16,"context_line":"    the compute threshold option is nonzero, computes will report their"},{"line_number":17,"context_line":"    failure count for the scheduler to consider. If the threshold"},{"line_number":18,"context_line":"    value is zero or unset, then computes will not report this value"},{"line_number":19,"context_line":"    and the scheduler will assume the number of failures for"},{"line_number":20,"context_line":"    non-reporting compute nodes to be zero. By default, the scheduler"},{"line_number":21,"context_line":"    weigher is enabled and configured with a very large multiplier to"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5f7c97a3_74887821","line":18,"range":{"start_line":18,"start_character":18,"end_line":18,"end_character":26},"updated":"2018-06-06 22:06:32.000000000","message":"This is wrong, from the last patch set:\n\n\"If unset, the default is 10 so it is set - the only way to disable is by setting the threshold to 0.\"\n\nSo just remove \"or unset\".","commit_id":"458f25f893db4d660ebc2a36f8e406e8cfece771"}]}
