)]}'
{"swift/common/ring/ring.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"103e2a1cdc206e34c9c4870730080d795ff1838b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    @property"},{"line_number":59,"context_line":"    def replica_count(self):"},{"line_number":60,"context_line":"        \"\"\"Number of replicas (full or partial) used in the ring.\"\"\""},{"line_number":61,"context_line":"        return calc_replica_count(self._replica2part2dev_id)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @classmethod"},{"line_number":64,"context_line":"    def deserialize_v1(cls, gz_file, metadata_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_feed498b","line":61,"updated":"2017-09-13 17:33:41.000000000","message":"I think it\u0027s kind weird for both the Ring class and RingData to have this same property/method... maybe it\u0027s more of a MixIn kinda thing for objects that have a _replica2part2dev_id attribute?","commit_id":"8d981add7c0dc533b0b2ad43af0ebc5eef62f7af"}],"swift/common/storage_policy.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ced2326362a16047e94dde0da08d6b16dfafe484","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            considering the number of nodes in the primary list from the ring."},{"line_number":622,"context_line":"            \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"            configured_fragment_count \u003d len(ring_data._replica2part2dev_id)"},{"line_number":625,"context_line":"            required_fragment_count \u003d \\"},{"line_number":626,"context_line":"                (self.ec_n_unique_fragments) * self.ec_duplication_factor"},{"line_number":627,"context_line":"            if configured_fragment_count !\u003d required_fragment_count:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_38676928","line":624,"updated":"2017-09-13 15:03:19.000000000","message":"I think we\u0027ve already gone off the rails at this point... this is private ring data.","commit_id":"fe2f47a64256eba546dcd81caf723c3216af4604"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ced2326362a16047e94dde0da08d6b16dfafe484","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                raise RingLoadError("},{"line_number":638,"context_line":"                    \u0027EC ring for policy %s needs to be configured with \u0027"},{"line_number":639,"context_line":"                    \u0027integer replicas. Got %d parts for final replica, \u0027"},{"line_number":640,"context_line":"                    \u0027not %d.\u0027 % (self.name, final_replica_parts, total_parts))"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        self.object_ring \u003d Ring("},{"line_number":643,"context_line":"            swift_dir, ring_name\u003dself.ring_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_dddbb7ea","line":640,"updated":"2017-09-13 15:03:19.000000000","message":"I vaguely recall this esoteric property being a feature of fractional replica counts... is this the best/clearest signal we have?\n\nI confirmed w/o this check in place - everyone is happy except some % of parts when PUT don\u0027t get a last node for the last parity frag.","commit_id":"fe2f47a64256eba546dcd81caf723c3216af4604"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"103e2a1cdc206e34c9c4870730080d795ff1838b","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            considering the number of nodes in the primary list from the ring."},{"line_number":622,"context_line":"            \"\"\""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"            configured_fragment_count \u003d ring_data.replica_count"},{"line_number":625,"context_line":"            required_fragment_count \u003d \\"},{"line_number":626,"context_line":"                (self.ec_n_unique_fragments) * self.ec_duplication_factor"},{"line_number":627,"context_line":"            if configured_fragment_count !\u003d required_fragment_count:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_beffc132","line":624,"updated":"2017-09-13 17:33:41.000000000","message":"looks better to me...","commit_id":"8d981add7c0dc533b0b2ad43af0ebc5eef62f7af"}],"test/unit/common/test_storage_policy.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ced2326362a16047e94dde0da08d6b16dfafe484","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"            with mock.patch(\u0027swift.common.ring.ring.RingData.load\u0027,"},{"line_number":1347,"context_line":"                            return_value\u003dMockRingData(ring_replicas)):"},{"line_number":1348,"context_line":"                with mock.patch("},{"line_number":1349,"context_line":"                        \u0027swift.common.ring.ring.validate_configuration\u0027):"},{"line_number":1350,"context_line":"                    msg \u003d \u0027EC ring for policy %s needs to be configured with \u0027 \\"},{"line_number":1351,"context_line":"                          \u0027integer replicas. Got 7 parts for final replica, \u0027 \\"},{"line_number":1352,"context_line":"                          \u0027not 8.\u0027 % policy.name"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_9d22cfff","line":1349,"updated":"2017-09-13 15:03:19.000000000","message":"seems a little on the nose this test...","commit_id":"fe2f47a64256eba546dcd81caf723c3216af4604"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"103e2a1cdc206e34c9c4870730080d795ff1838b","unresolved":false,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"        class MockRingData(object):"},{"line_number":1305,"context_line":"            def __init__(self, num_replica):"},{"line_number":1306,"context_line":"                self.replica_count \u003d num_replica"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        def do_test(actual_load_ring_replicas):"},{"line_number":1309,"context_line":"            for policy, ring_replicas in zip(policies,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_7e8ef9d0","line":1306,"updated":"2017-09-13 17:33:41.000000000","message":"hrmm... the property method attribute interface makes it easy to stub/fake - so that\u0027s nice!","commit_id":"8d981add7c0dc533b0b2ad43af0ebc5eef62f7af"}]}
