)]}'
{"cinder/backup/services/swift.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"e7484fe1c5fed8730bab28779e6fbe89c3f88610","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            LOG.debug(_(\u0027About to put_object\u0027))"},{"line_number":254,"context_line":"            try:"},{"line_number":255,"context_line":"                etag \u003d self.conn.put_object(container, object_name, reader,"},{"line_number":256,"context_line":"                                            content_length\u003dlen(data))"},{"line_number":257,"context_line":"            except socket.error as err:"},{"line_number":258,"context_line":"                raise exception.SwiftConnectionFailed(reason\u003dstr(err))"},{"line_number":259,"context_line":"            LOG.debug(_(\u0027swift MD5 for %(object_name)s: %(etag)s\u0027) % locals())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2F20U%3D","line":256,"updated":"2013-06-19 17:49:59.000000000","message":"So my argument  here is that we are calling python-swift client, using its defined interfaces, in a way that works fine with swift. I\u0027d therefore suggest that cinder is not the right place to fix this. Other applications use python-swift client, so the right place to fix all these apps is in that library.","commit_id":"b7e1f7ab27b66d8a837dcc598fcc5ce34c1545fe"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"45223bd39fd5f05eb53e6152c4856e51c393da46","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            LOG.debug(_(\u0027About to put_object\u0027))"},{"line_number":254,"context_line":"            try:"},{"line_number":255,"context_line":"                etag \u003d self.conn.put_object(container, object_name, reader,"},{"line_number":256,"context_line":"                                            content_length\u003dlen(data))"},{"line_number":257,"context_line":"            except socket.error as err:"},{"line_number":258,"context_line":"                raise exception.SwiftConnectionFailed(reason\u003dstr(err))"},{"line_number":259,"context_line":"            LOG.debug(_(\u0027swift MD5 for %(object_name)s: %(etag)s\u0027) % locals())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fr3k%3D","line":256,"in_reply_to":"AAAAPn%2F%2F1bo%3D","updated":"2013-06-25 09:59:58.000000000","message":"Fair enough with the performance gain. Review changed to +2","commit_id":"b7e1f7ab27b66d8a837dcc598fcc5ce34c1545fe"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"2b187dc52514d2d2ed82a5b456ef9cb43ae4c24b","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            LOG.debug(_(\u0027About to put_object\u0027))"},{"line_number":254,"context_line":"            try:"},{"line_number":255,"context_line":"                etag \u003d self.conn.put_object(container, object_name, reader,"},{"line_number":256,"context_line":"                                            content_length\u003dlen(data))"},{"line_number":257,"context_line":"            except socket.error as err:"},{"line_number":258,"context_line":"                raise exception.SwiftConnectionFailed(reason\u003dstr(err))"},{"line_number":259,"context_line":"            LOG.debug(_(\u0027swift MD5 for %(object_name)s: %(etag)s\u0027) % locals())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2F1bo%3D","line":256,"in_reply_to":"AAAAPn%2F%2F20U%3D","updated":"2013-06-20 05:49:06.000000000","message":"I agree that this has to be fixed in the swift lib. I will open a bug or fix it today. But anyway from a performance perspective it makes no sense to let the lib calculate the content_length again. Since put_object gets a stream it has to use seek(0, SEEK_END) which is inefficient since we already have the content length here.","commit_id":"b7e1f7ab27b66d8a837dcc598fcc5ce34c1545fe"}]}
