)]}'
{"swift/common/ring/builder.py":[{"author":{"_account_id":8996,"name":"Florent Flament","email":"contact@florentflament.com","username":"florent"},"change_message_id":"19f3acd0fc985b69fa43b95fd37d1c418c270f7d","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                        dev[\u0027parts\u0027] -\u003d 1"},{"line_number":734,"context_line":"                        removed_replica \u003d True"},{"line_number":735,"context_line":"                        for tier in tfd[dev[\u0027id\u0027]]:"},{"line_number":736,"context_line":"                            available_parts_for_tier[tier] -\u003d 1"},{"line_number":737,"context_line":"                        break"},{"line_number":738,"context_line":"                if removed_replica:"},{"line_number":739,"context_line":"                    if dev[\u0027id\u0027] not in tfd:"}],"source_content_type":"text/x-python","patch_set":18,"id":"da9df570_a27cfe73","line":736,"updated":"2014-09-21 19:04:06.000000000","message":"IMO this is not enough.\n`available_parts_for_tier` should be updated for every tier, not only for those in tfd[dev[\u0027id\u0027]] ...","commit_id":"ba4e59648bab2220f83925c6ad20c7799f4ca9eb"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"93f9b373cb6e9c931fbb707623004a4b779a4059","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        \"\"\""},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        wanted_parts_for_tier \u003d {}"},{"line_number":657,"context_line":"        for dev in self.devs:"},{"line_number":658,"context_line":"            if dev is None:  # Happens when a device has been removed"},{"line_number":659,"context_line":"                continue"},{"line_number":660,"context_line":"            for tier in tiers_for_dev(dev):"}],"source_content_type":"text/x-python","patch_set":20,"id":"baa201ad_723ac2ce","line":657,"updated":"2014-09-30 17:44:45.000000000","message":"If you use self._iter_devs(), you don\u0027t have to check for None here.","commit_id":"79d78865839bf66e896ef4032a44f5a8ed9aaa6e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"93f9b373cb6e9c931fbb707623004a4b779a4059","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        # parts_wanted). If not, the sum of all parts_wanted is 0 +/-"},{"line_number":698,"context_line":"        # rounding errors."},{"line_number":699,"context_line":"        wanted_parts_total \u003d sum("},{"line_number":700,"context_line":"            [max(0, d[\u0027parts_wanted\u0027]) for d in self.devs if d])"},{"line_number":701,"context_line":"        wanted_parts_for_tier \u003d self._build_wanted_parts_for_tiers()"},{"line_number":702,"context_line":"        for part in xrange(self.parts):"},{"line_number":703,"context_line":"            # Only move one replica at a time if possible."}],"source_content_type":"text/x-python","patch_set":20,"id":"baa201ad_923726e3","line":700,"updated":"2014-09-30 17:44:45.000000000","message":"self._iter_devs again","commit_id":"79d78865839bf66e896ef4032a44f5a8ed9aaa6e"}]}
