)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0620c717797a39c607f9d7a5b4435302f0134635","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a config option to the filter scheduler which changes the"},{"line_number":10,"context_line":"behavior to randomly select hosts based on weights instead of"},{"line_number":11,"context_line":"always chosing the highest weight."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint stochastic-weighing-scheduler"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dada55a8_2f4d9b99","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":14},"updated":"2016-07-25 20:45:10.000000000","message":"choosing","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a config option to the filter scheduler which changes the"},{"line_number":10,"context_line":"behavior to randomly select hosts based on weights instead of"},{"line_number":11,"context_line":"always chosing the highest weight."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint stochastic-weighing-scheduler"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dada55a8_35d32e61","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":14},"in_reply_to":"dada55a8_2f4d9b99","updated":"2016-07-25 21:06:23.000000000","message":"Done","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"91fcb2937e6fdc400f13eeb3818492709b9db974","unresolved":false,"context_lines":[{"line_number":11,"context_line":"always choosing the highest weight."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint stochastic-weighing-scheduler"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie5985066e68aef25600f8b76948adacd4c04263a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_75b92679","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":0},"updated":"2016-07-25 21:16:44.000000000","message":"deserves a DocImpact.","commit_id":"3e56060ceffb591a5d6b02e42125b6f8a1ac42e5"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0620c717797a39c607f9d7a5b4435302f0134635","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.volume import utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"filter_scheduler_opt \u003d cfg.BoolOpt(\u0027filter_schedule_stochastic\u0027,"},{"line_number":35,"context_line":"                                   default\u003dFalse,"},{"line_number":36,"context_line":"                                   help\u003d\u0027Choose randomly from available pools \u0027"},{"line_number":37,"context_line":"                                        \u0027when scheduling volumes, instead of \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_6f15d347","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":20},"updated":"2016-07-25 20:45:10.000000000","message":"perform_stochastic_scheduling, or something like that?","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.volume import utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"filter_scheduler_opt \u003d cfg.BoolOpt(\u0027filter_schedule_stochastic\u0027,"},{"line_number":35,"context_line":"                                   default\u003dFalse,"},{"line_number":36,"context_line":"                                   help\u003d\u0027Choose randomly from available pools \u0027"},{"line_number":37,"context_line":"                                        \u0027when scheduling volumes, instead of \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_55d06253","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":20},"in_reply_to":"dada55a8_6f15d347","updated":"2016-07-25 21:06:23.000000000","message":"This option is specific to the filter scheduler, and I wanted to avoid the name being too long.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cf9c74b967506748d93d79293ef8ed40ee707aec","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    @staticmethod"},{"line_number":457,"context_line":"    def _lottery_by_weight(weighted_objs):"},{"line_number":458,"context_line":"        if not weighted_objs:"},{"line_number":459,"context_line":"            raise ValueError(\u0027Cannot choose winner from empty list\u0027)"},{"line_number":460,"context_line":"        assert isinstance(weighted_objs, list)"},{"line_number":461,"context_line":"        # First compute the total weight of all the objects and the upper"},{"line_number":462,"context_line":"        # bound for each object to \"win\" the lottery."}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_cf3f9f23","line":459,"updated":"2016-07-25 20:35:30.000000000","message":"Raise exception.NoValidHost to be consistent with other places.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"d6f2f350c59b702d8e4e23e7f761eb2efc9ec3ad","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    @staticmethod"},{"line_number":457,"context_line":"    def _lottery_by_weight(weighted_objs):"},{"line_number":458,"context_line":"        if not weighted_objs:"},{"line_number":459,"context_line":"            raise ValueError(\u0027Cannot choose winner from empty list\u0027)"},{"line_number":460,"context_line":"        assert isinstance(weighted_objs, list)"},{"line_number":461,"context_line":"        # First compute the total weight of all the objects and the upper"},{"line_number":462,"context_line":"        # bound for each object to \"win\" the lottery."}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_eaf7f156","line":459,"in_reply_to":"dada55a8_cf3f9f23","updated":"2016-07-25 20:56:21.000000000","message":"This is meant to be a reusable method -- not limited to hosts. The caller of the method will throw the exception if the list is empty so this check is purely defensive.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c881802716cddf47102b93bb0782664053d00e0a","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            max_value \u003d total_weight"},{"line_number":468,"context_line":"            table.append((max_value, weighed_obj))"},{"line_number":469,"context_line":"        # Now draw a random value with the computed range"},{"line_number":470,"context_line":"        winning_value \u003d random.random() * total_weight"},{"line_number":471,"context_line":"        # Scan the table to find the first object with a maximum higher than"},{"line_number":472,"context_line":"        # the random number. This is the winner."},{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8f448774","line":470,"updated":"2016-07-25 20:40:55.000000000","message":"Sort of silly reason, but if we use random.randrange() or randint() the unit tests are easier to read and figure out what the ddt inputs are doing without much mental math.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"d6f2f350c59b702d8e4e23e7f761eb2efc9ec3ad","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            max_value \u003d total_weight"},{"line_number":468,"context_line":"            table.append((max_value, weighed_obj))"},{"line_number":469,"context_line":"        # Now draw a random value with the computed range"},{"line_number":470,"context_line":"        winning_value \u003d random.random() * total_weight"},{"line_number":471,"context_line":"        # Scan the table to find the first object with a maximum higher than"},{"line_number":472,"context_line":"        # the random number. This is the winner."},{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_4a8f1d23","line":470,"in_reply_to":"dada55a8_8f448774","updated":"2016-07-25 20:56:21.000000000","message":"We\u0027re dealing with floats here. Rounding to integers would just cause less accuracy. To regain the accuracy we\u0027d need to scale the numbers to rather large values (probably 1000+) which again makes mental math hard.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c881802716cddf47102b93bb0782664053d00e0a","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"},{"line_number":474,"context_line":"            if max_value \u003e winning_value:"},{"line_number":475,"context_line":"                return weighed_obj"},{"line_number":476,"context_line":"        # Because the random number in the range [0, total_weight) the above"},{"line_number":477,"context_line":"        # loop should always find the winner, however with rounding of floats"},{"line_number":478,"context_line":"        # it\u0027s possible, so return the last element of the list in that case."},{"line_number":479,"context_line":"        return weighted_objs[-1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _choose_top_host(self, weighed_hosts, request_spec):"},{"line_number":482,"context_line":"        if CONF.filter_schedule_stochastic:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_afc50b3e","line":479,"range":{"start_line":476,"start_character":0,"end_line":479,"end_character":32},"updated":"2016-07-25 20:40:55.000000000","message":"In the spirit of the method maybe it should return a random index :P","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"81ee1a6098998574a4f555617f5fa5d6044041ca","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"},{"line_number":474,"context_line":"            if max_value \u003e winning_value:"},{"line_number":475,"context_line":"                return weighed_obj"},{"line_number":476,"context_line":"        # Because the random number in the range [0, total_weight) the above"},{"line_number":477,"context_line":"        # loop should always find the winner, however with rounding of floats"},{"line_number":478,"context_line":"        # it\u0027s possible, so return the last element of the list in that case."},{"line_number":479,"context_line":"        return weighted_objs[-1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _choose_top_host(self, weighed_hosts, request_spec):"},{"line_number":482,"context_line":"        if CONF.filter_schedule_stochastic:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ca25cdc2","line":479,"range":{"start_line":476,"start_character":0,"end_line":479,"end_character":32},"in_reply_to":"dada55a8_8ab63588","updated":"2016-07-25 20:58:39.000000000","message":"+1","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"},{"line_number":474,"context_line":"            if max_value \u003e winning_value:"},{"line_number":475,"context_line":"                return weighed_obj"},{"line_number":476,"context_line":"        # Because the random number in the range [0, total_weight) the above"},{"line_number":477,"context_line":"        # loop should always find the winner, however with rounding of floats"},{"line_number":478,"context_line":"        # it\u0027s possible, so return the last element of the list in that case."},{"line_number":479,"context_line":"        return weighted_objs[-1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _choose_top_host(self, weighed_hosts, request_spec):"},{"line_number":482,"context_line":"        if CONF.filter_schedule_stochastic:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_55e98219","line":479,"range":{"start_line":476,"start_character":0,"end_line":479,"end_character":32},"in_reply_to":"dada55a8_8ab63588","updated":"2016-07-25 21:06:23.000000000","message":"I updated the comment to make it more clear","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"d6f2f350c59b702d8e4e23e7f761eb2efc9ec3ad","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"},{"line_number":474,"context_line":"            if max_value \u003e winning_value:"},{"line_number":475,"context_line":"                return weighed_obj"},{"line_number":476,"context_line":"        # Because the random number in the range [0, total_weight) the above"},{"line_number":477,"context_line":"        # loop should always find the winner, however with rounding of floats"},{"line_number":478,"context_line":"        # it\u0027s possible, so return the last element of the list in that case."},{"line_number":479,"context_line":"        return weighted_objs[-1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _choose_top_host(self, weighed_hosts, request_spec):"},{"line_number":482,"context_line":"        if CONF.filter_schedule_stochastic:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8ab63588","line":479,"range":{"start_line":476,"start_character":0,"end_line":479,"end_character":32},"in_reply_to":"dada55a8_afc50b3e","updated":"2016-07-25 20:56:21.000000000","message":"It\u0027s one of those \"should not happpen\" cases but I\u0027m worried enough about the possibility of rounding in floating point math to return a value instead of raising an exception. Which value we return *shouldn\u0027t* matter. I chose the last list element because it was the closest to getting chosen and would have been chosen if the rounding hadn\u0027t prevented it.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"17ab151d94760b0e2e5e3acfb1be2596ae8e1451","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for (max_value, weighed_obj) in table:"},{"line_number":474,"context_line":"            if max_value \u003e winning_value:"},{"line_number":475,"context_line":"                return weighed_obj"},{"line_number":476,"context_line":"        # Because the random number in the range [0, total_weight) the above"},{"line_number":477,"context_line":"        # loop should always find the winner, however with rounding of floats"},{"line_number":478,"context_line":"        # it\u0027s possible, so return the last element of the list in that case."},{"line_number":479,"context_line":"        return weighted_objs[-1]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _choose_top_host(self, weighed_hosts, request_spec):"},{"line_number":482,"context_line":"        if CONF.filter_schedule_stochastic:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8aabd588","line":479,"range":{"start_line":476,"start_character":0,"end_line":479,"end_character":32},"in_reply_to":"dada55a8_afc50b3e","updated":"2016-07-25 20:46:11.000000000","message":"yes, this would be anti-whatever we already have, which is picking weighted_hosts[0]","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"}],"cinder/scheduler/weights/__init__.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"1aeb5ba035b27a963e26f9ad5eb83c27b5441f59","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        super(TopHostWeightHandler, self).__init__(BaseHostWeigher, namespace)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class StochasticHostWeightHandler(base_weight.BaseWeightHandler):"},{"line_number":50,"context_line":"    def __init__(self, namespace):"},{"line_number":51,"context_line":"        super(StochasticHostWeightHandler, self).__init__(BaseHostWeigher,"},{"line_number":52,"context_line":"                                                          namespace)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_358f972b","line":49,"updated":"2016-07-29 18:51:29.000000000","message":"I\u0027m not a huge fan of putting more stuff (or really having the existing stuff) in __init__.py\u0027s. Would be nice to split them up into separate files IMO. If we do it now we don\u0027t have to worry about making a compatibility layer when loading the config options in future releases when we inevitably split it up after trying to add more WeightHandlers.","commit_id":"9c3d2e20797e5179584cd8f5279d71fa02f581be"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"875a92188db8abe8ccd7dae380852be2c4666dc3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TopHostWeightHandler(base_weight.BaseWeightHandler):"},{"line_number":41,"context_line":"    object_class \u003d WeighedHost"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def __init__(self, namespace):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_66078418","line":40,"updated":"2016-08-01 02:30:47.000000000","message":"I feel the need to rename this weight handler too, but how about OrderedHostWeightHandler()?","commit_id":"ea726f56a2db1146d35ebcf317f21550d9939023"}],"cinder/scheduler/weights/stochastic.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"875a92188db8abe8ccd7dae380852be2c4666dc3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        for (i, (max_value, weighed_obj)) in enumerate(table):"},{"line_number":72,"context_line":"            if max_value \u003e winning_value:"},{"line_number":73,"context_line":"                # Return a single element array with the winner."},{"line_number":74,"context_line":"                return [weighed_objs[i]]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # It\u0027s theoretically possible for the above loop to terminate with no"},{"line_number":77,"context_line":"        # winner. This happens when winning_value \u003e\u003d total_weight, which"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_0606881c","line":74,"updated":"2016-08-01 02:30:47.000000000","message":"I think the interface for WeightHanlder.get_weighed_objects() is to return a list of weighted objects for all input object.  Returning only one object is kinda breaking this interface. Caller f get_weighed_objects() may or may not utilze more than one object.  So I\u0027d like to preserve the interface and have StochasticHostWeightHanlder return a list of all input host, weighted stochastically.","commit_id":"ea726f56a2db1146d35ebcf317f21550d9939023"}],"cinder/tests/unit/scheduler/test_filter_scheduler.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cf9c74b967506748d93d79293ef8ed40ee707aec","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder.tests.unit.scheduler import test_scheduler"},{"line_number":30,"context_line":"from cinder.volume import utils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from oslo_config import cfg"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_4f31ef0a","line":32,"updated":"2016-07-25 20:35:30.000000000","message":"This is third party lib so it should be moved up to be in the same group as ddt.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder.tests.unit.scheduler import test_scheduler"},{"line_number":30,"context_line":"from cinder.volume import utils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from oslo_config import cfg"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_95cada9f","line":32,"in_reply_to":"dada55a8_4f31ef0a","updated":"2016-07-25 21:06:23.000000000","message":"Done","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cf9c74b967506748d93d79293ef8ed40ee707aec","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        WeighedObject(\u0027A\u0027, 1),"},{"line_number":488,"context_line":"        WeighedObject(\u0027B\u0027, 3),"},{"line_number":489,"context_line":"        WeighedObject(\u0027C\u0027, 2)"},{"line_number":490,"context_line":"    ]"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    @ddt.data("},{"line_number":493,"context_line":"        (0.0, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_cf0cbf44","line":490,"updated":"2016-07-25 20:35:30.000000000","message":"Move this definition up to after the imports and before class definitions.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        WeighedObject(\u0027A\u0027, 1),"},{"line_number":488,"context_line":"        WeighedObject(\u0027B\u0027, 3),"},{"line_number":489,"context_line":"        WeighedObject(\u0027C\u0027, 2)"},{"line_number":490,"context_line":"    ]"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    @ddt.data("},{"line_number":493,"context_line":"        (0.0, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_b5bf1efb","line":490,"in_reply_to":"dada55a8_cf0cbf44","updated":"2016-07-25 21:06:23.000000000","message":"Done","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cf9c74b967506748d93d79293ef8ed40ee707aec","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host1\u0027, {}), 3),"},{"line_number":523,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host2\u0027, {}), 2),"},{"line_number":524,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host3\u0027, {}), 1),"},{"line_number":525,"context_line":"    ]"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def test__choose_top_host_normal(self):"},{"line_number":528,"context_line":"        sched \u003d fakes.FakeFilterScheduler()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ca130d5b","line":525,"updated":"2016-07-25 20:35:30.000000000","message":"Move this definition up to after the imports and before class definitions.","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"9e9dcdc507f04c6a8c3e6c7f37be734cc22e8dde","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host1\u0027, {}), 3),"},{"line_number":523,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host2\u0027, {}), 2),"},{"line_number":524,"context_line":"        WeighedObject(fakes.FakeHostState(\u0027host3\u0027, {}), 1),"},{"line_number":525,"context_line":"    ]"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def test__choose_top_host_normal(self):"},{"line_number":528,"context_line":"        sched \u003d fakes.FakeFilterScheduler()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_15bf0afc","line":525,"in_reply_to":"dada55a8_ca130d5b","updated":"2016-07-25 21:06:23.000000000","message":"Done","commit_id":"f91a90f7862225ee7befd3c17b919626c4e77dc2"}],"releasenotes/notes/add-stochastic-scheduling-option-99e10eae023fbcca.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"91fcb2937e6fdc400f13eeb3818492709b9db974","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added a new config option: filter_schedule_stochastic."},{"line_number":4,"context_line":"    This is a global option which casuses the scheduler to"},{"line_number":5,"context_line":"    randomly choose pools when scheduling, if the filter"},{"line_number":6,"context_line":"    scheduler is used. The random probabilities are"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"dada55a8_55eea28b","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":30},"updated":"2016-07-25 21:16:44.000000000","message":"please remove \u0027:\u0027 -\u003e it will confuse the yaml..","commit_id":"3e56060ceffb591a5d6b02e42125b6f8a1ac42e5"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"91fcb2937e6fdc400f13eeb3818492709b9db974","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added a new config option: filter_schedule_stochastic."},{"line_number":4,"context_line":"    This is a global option which casuses the scheduler to"},{"line_number":5,"context_line":"    randomly choose pools when scheduling, if the filter"},{"line_number":6,"context_line":"    scheduler is used. The random probabilities are"},{"line_number":7,"context_line":"    proportional to the weights, so higher weighted pools"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"dada55a8_15fd4a3a","line":4,"range":{"start_line":4,"start_character":34,"end_line":4,"end_character":41},"updated":"2016-07-25 21:16:44.000000000","message":"causes","commit_id":"3e56060ceffb591a5d6b02e42125b6f8a1ac42e5"}]}
