1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-30 02:32:42 +01:00

Don't compute MIME type of noninitial chunks from diffusion.filecontentquery

Summary:
Ref T12857. This is generally fairly fuzzy for now, but here's something concrete: when we build a large file with `diffusion.filecontentquery`, we compute the MIME type of all chunks, not just the initial chunk.

Instead, pass a dummy MIME type to non-initial chunks so we don't try to compute them. This mirrors logic elsewhere, in `file.uploadchunk`. This should perhaps be centralized at some point, but it's a bit tricky since the file doesn't know that it's a chunk until later.

Also, clean up the `TempFile` immediately -- this shouldn't actually affect anything, but we don't need it to live any longer than this.

Test Plan:
  - Made `hashFileContent()` return `null` to skip the chunk cache.
  - Added `phlog()` to the MIME type computation.
  - Loaded a 12MB file in Diffusion.
  - Before patch: Saw 3x MIME type computations, one for each 4MB chunk.
  - After patch: Saw 1x MIME type computation, for initial chunk only.

Reviewers: chad, amckinley

Reviewed By: chad

Maniphest Tasks: T12857

Differential Revision: https://secure.phabricator.com/D18138
This commit is contained in:
epriestley 2017-06-19 14:41:32 -07:00
parent c71d9c601f
commit 17fc447503
2 changed files with 13 additions and 6 deletions

View file

@ -393,6 +393,7 @@ final class PhabricatorFile extends PhabricatorFileDAO
$tmp = new TempFile(); $tmp = new TempFile();
Filesystem::writeFile($tmp, $data); Filesystem::writeFile($tmp, $data);
$file->setMimeType(Filesystem::getMimeType($tmp)); $file->setMimeType(Filesystem::getMimeType($tmp));
unset($tmp);
} }
try { try {

View file

@ -186,12 +186,18 @@ abstract class PhabricatorFileUploadSource
$actual_length = strlen($data); $actual_length = strlen($data);
$rope->removeBytesFromHead($actual_length); $rope->removeBytesFromHead($actual_length);
$chunk_data = PhabricatorFile::newFromFileData( $params = array(
$data, 'name' => $file->getMonogram().'.chunk-'.$offset,
array( 'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,
'name' => $file->getMonogram().'.chunk-'.$offset, );
'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,
)); // If this isn't the initial chunk, provide a dummy MIME type so we do not
// try to detect it. See T12857.
if ($offset > 0) {
$params['mime-type'] = 'application/octet-stream';
}
$chunk_data = PhabricatorFile::newFromFileData($data, $params);
$chunk = PhabricatorFileChunk::initializeNewChunk( $chunk = PhabricatorFileChunk::initializeNewChunk(
$file->getStorageHandle(), $file->getStorageHandle(),