Make copying to/from storage systems memory efficient (#419)
authorSebastian Spaeth <Sebastian@SSpaeth.de>
Wed, 19 Dec 2012 10:06:51 +0000 (11:06 +0100)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sun, 3 Mar 2013 20:40:06 +0000 (14:40 -0600)
commit99a54c0095ccadcebeb640cb20cb6eadb8b9a39d
tree8eb9aa91ffdecddbb1aca9780fe5ba9a9e3bded9
parent3ff4f75203295550a823e3651ead3340a690b7de
Make copying to/from storage systems memory efficient (#419)

The copy_locally and copy_local_to_storage (very inconsistent terms BTW)
were simply slurping in everything in RAM and writing it out at once.
(the copy_locally was actually memory efficient if the remote system was local)

Use shutil.copyfileobj which does chunked reads/writes on file objects.
The default buffer size is 16kb, and as each chunk means a separate HTTP
request for e.g. cloudfiles, we use a chunksize of 4MB here (which has
just been arbitrarily set by me without tests).

This should help with the failure to upload large files issue #419.
mediagoblin/storage/__init__.py
mediagoblin/storage/filestorage.py