)]}'
{"swift/common/storage_policy.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b6000424efcae487c05e05f170f06fc93d25e494","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    @property"},{"line_number":294,"context_line":"    def ec_driver(self):"},{"line_number":295,"context_line":"        return self._pyeclib_driver"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def quorum_size(self, n):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Number of successful backend requests needed for the proxy to consider"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_e1f162ce","line":296,"updated":"2014-09-02 04:37:13.000000000","message":"It looks good to make ec_driver access as a property but if we do so, we should change all property access for _pyeclib_driver. (i.e. at line 236 and line 258.)","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"}],"swift/obj/server.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b6000424efcae487c05e05f170f06fc93d25e494","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                if not ec_policy:"},{"line_number":486,"context_line":"                    if \u0027etag\u0027 in request.headers and \\"},{"line_number":487,"context_line":"                            request.headers[\u0027etag\u0027].lower() !\u003d etag:"},{"line_number":488,"context_line":"                        return HTTPUnprocessableEntity(request\u003drequest)"},{"line_number":489,"context_line":"                etag \u003d etag.hexdigest()"},{"line_number":490,"context_line":"                if \u0027etag\u0027 in request.headers and \\"},{"line_number":491,"context_line":"                        request.headers[\u0027etag\u0027].lower() !\u003d etag:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_1e616739","line":488,"updated":"2014-09-02 04:37:13.000000000","message":"Is this sequence for non-ec object? If so, we have to compare reqest.headers[\u0027etag\u0027].lower() and etag.hexdigest().\n\nHowever, according to your comment, it looks that we should ignore something you intended when ec_policy is \"True\", right?","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b6000424efcae487c05e05f170f06fc93d25e494","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            except (Exception, Timeout):"},{"line_number":431,"context_line":"                self.app.exception_occurred("},{"line_number":432,"context_line":"                    conn.node, _(\u0027Object\u0027),"},{"line_number":433,"context_line":"                    _(\u0027Trying to get final status of PUT to %s\u0027) % req.path)"},{"line_number":434,"context_line":"        pile \u003d GreenAsyncPile(len(conns))"},{"line_number":435,"context_line":"        for conn in conns:"},{"line_number":436,"context_line":"            pile.spawn(get_conn_response, conn)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_5e3ccfe2","line":433,"updated":"2014-09-02 04:37:13.000000000","message":"If these exceptions are suppressed, this function have to return a tuple because caller expects 2 column tuple as a return value. (e.g. at line 437 of this file)\n\nMaybe, we can fix this to add following 1 line here:\n\nreturn conn, None\n\n\nBut I\u0027m not sure it is suitable for your intention.","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"b6000424efcae487c05e05f170f06fc93d25e494","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            # Early check to validate if the replica count for the"},{"line_number":520,"context_line":"            # policy is enough to hold (data + parity) nodes"},{"line_number":521,"context_line":"            try:"},{"line_number":522,"context_line":"                policy.validate_ring_replica_count(obj_ring.replica_count)"},{"line_number":523,"context_line":"            except RingValidationError:"},{"line_number":524,"context_line":"                return HTTPServerError(request\u003dreq)"},{"line_number":525,"context_line":"            ec_policy \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_81809647","line":522,"updated":"2014-09-02 04:37:13.000000000","message":"Maybe, this should be policy.validate_ring_node_count().","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"2c9b00ba5e6bf3854bced602da96ba2bfb11ad95","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                    with ChunkReadTimeout(self.app.client_timeout):"},{"line_number":815,"context_line":"                        try:"},{"line_number":816,"context_line":"                            if ec_policy:"},{"line_number":817,"context_line":"                                _buffer \u003d []"},{"line_number":818,"context_line":"                                leftover \u003d seglen \u003d 0"},{"line_number":819,"context_line":"                                # We buffer HTTP chunks until we have enough to"},{"line_number":820,"context_line":"                                # meet the ec_object_segment_size constraint."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_8980b447","line":817,"updated":"2014-09-02 11:23:25.000000000","message":"should be _buffer.append(seg) to pick up left over bytes in last loop?","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"2c9b00ba5e6bf3854bced602da96ba2bfb11ad95","unresolved":false,"context_lines":[{"line_number":824,"context_line":"                                    if seglen \u003e\u003d ec_object_segment_size:"},{"line_number":825,"context_line":"                                        # Buffer any leftover bytes"},{"line_number":826,"context_line":"                                        leftover \u003d \\"},{"line_number":827,"context_line":"                                            seglen - ec_object_segment_size"},{"line_number":828,"context_line":"                                        next_seg \u003d chunk[:leftover]"},{"line_number":829,"context_line":"                                        chunk \u003d chunk[leftover:]"},{"line_number":830,"context_line":"                                    _buffer.append(chunk)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_24752d98","line":827,"updated":"2014-09-02 11:23:25.000000000","message":"so each segment is \u003c\u003d ec_object_segment_size when encoding. \nbut in _ec_pack_fragment_metadata you\u0027re calling get_segment_info() to calculate the segment size.there might be some cases that last_segment_size \u003e ec_object_segment_size( which is merged with previous segment). need to make the logic consistent with pyeclib here.","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"2c9b00ba5e6bf3854bced602da96ba2bfb11ad95","unresolved":false,"context_lines":[{"line_number":857,"context_line":""},{"line_number":858,"context_line":"                        bytes_transferred +\u003d len(ec_fragments[0])"},{"line_number":859,"context_line":"                        object_bytes_transferred +\u003d len(seg)"},{"line_number":860,"context_line":"                        seg \u003d next_seg"},{"line_number":861,"context_line":"                        next_seg \u003d \"\""},{"line_number":862,"context_line":"                    else:"},{"line_number":863,"context_line":"                        orig_object_etag.update(chunk)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_c9463c21","line":860,"updated":"2014-09-02 11:23:25.000000000","message":"left over bytes were saved here in seg","commit_id":"b192abe8f247182f9e96112eebf8fea70486059e"}]}
