)]}'
{"swift/common/ring/builder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"829085afa1ce1c49ce0cfd458b519504c6820e0f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        return bool(self._part_moved_bitmap[byte] \u0026 (128 \u003e\u003e bit))"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _can_part_move(self, part):"},{"line_number":159,"context_line":"        # if min_part_hours is zero then checking _last_part_moves will not"},{"line_number":160,"context_line":"        # indicate if the part has already moved during the current rebalance,"},{"line_number":161,"context_line":"        # but _has_part_moved will."},{"line_number":162,"context_line":"        return (not self._last_part_moves or"},{"line_number":163,"context_line":"                (self._last_part_moves[part] \u003e\u003d self.min_part_hours and"},{"line_number":164,"context_line":"                 not self._has_part_moved(part)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_688d6730","side":"PARENT","line":161,"range":{"start_line":159,"start_character":8,"end_line":161,"end_character":35},"updated":"2017-07-20 09:09:27.000000000","message":"the comment was independent of the change at line 162, I felt it might help understand the need for call to _has_part_moved","commit_id":"593a306e60f5703df3fcfb0f8e98c623da5464ef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"829085afa1ce1c49ce0cfd458b519504c6820e0f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        byte, bit \u003d divmod(part, 8)"},{"line_number":156,"context_line":"        return bool(self._part_moved_bitmap[byte] \u0026 (128 \u003e\u003e bit))"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _can_part_move(self, part):"},{"line_number":159,"context_line":"        return (self._last_part_moves[part] \u003e\u003d self.min_part_hours and"},{"line_number":160,"context_line":"                not self._has_part_moved(part))"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_6892074e","line":158,"updated":"2017-07-20 09:09:27.000000000","message":"if this is called before the _last_part_moves array has been init\u0027d then a TypeError will be raised. In the parent patch it would return True, which is correct - if _last_part_moves is None then no part has moved so any part can move.","commit_id":"a01e1c06fbd650fdcdd24a10e862c975d521c6fe"}],"swift/common/ring/composite_builder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"829085afa1ce1c49ce0cfd458b519504c6820e0f","unresolved":false,"context_lines":[{"line_number":682,"context_line":"            part_power, replicas, min_part_hours)"},{"line_number":683,"context_line":"        self._cobuilders \u003d cobuilders if cobuilders is not None else [self]"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def _can_part_move(self, part):"},{"line_number":686,"context_line":"        return all(super(CooperativeRingBuilder, b)._can_part_move(part)"},{"line_number":687,"context_line":"                   for b in self._cobuilders if b._last_part_moves)"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_a8c01f2c","line":685,"updated":"2017-07-20 09:09:27.000000000","message":"if this is called before the _last_part_moves array is init\u0027d then it returns True - which is different behaviour wrt the superclass.","commit_id":"a01e1c06fbd650fdcdd24a10e862c975d521c6fe"}]}
