@csilvers ran into an issue similar to T10210 in a more recent version of Phabricator.
- Daemons could not write to the local file storage engine.
- This caused the --message phase of parsing a large commit to retry repeatedly, creating new diffs every time.
A general fix for this is probably to look for an existing persisted diff and reuse it if it already exists, building a new one only if it does not. Then we don't have to worry too much about getting the exception behavior exactly right.
Relevant trace:
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] [2016-05-13 15:05:34] EXCEPTION: (FilesystemException) Requested path '/opt/phabricator_files/c0/ce' is not writable. at [<phutil>/src/filesystem/Filesystem.php:1081]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] arcanist(), phabricator(), phutil()
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #0 <#2> Filesystem::assertWritable(string) called at [<phutil>/src/filesystem/Filesystem.php:73]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #1 <#2> Filesystem::assertWritableFile(string) called at [<phutil>/src/filesystem/Filesystem.php:89]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #2 <#2> Filesystem::writeFile(string, string) called at [<phabricator>/src/applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php:62]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #3 <#2> PhabricatorLocalDiskFileStorageEngine::writeFile(string, array) called at [<phabricator>/src/applications/files/storage/PhabricatorFile.php:437]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #4 <#2> PhabricatorFile::writeToEngine(PhabricatorLocalDiskFileStorageEngine, string, array) called at [<phabricator>/src/applications/files/storage/PhabricatorFile.php:334]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #5 phlog(FilesystemException) called at [<phabricator>/src/applications/files/storage/PhabricatorFile.php:344]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #6 PhabricatorFile::buildFromFileData(string, array) called at [<phabricator>/src/applications/files/storage/PhabricatorFile.php:395]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #7 PhabricatorFile::newFromFileData(string, array) called at [<phabricator>/src/applications/files/uploadsource/PhabricatorFileUploadSource.php:198]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #8 PhabricatorFileUploadSource::writeChunk(PhabricatorFile, PhabricatorChunkedFileStorageEngine) called at [<phabricator>/src/applications/files/uploadsource/PhabricatorFileUploadSource.php:163]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #9 PhabricatorFileUploadSource::writeChunkedFile() called at [<phabricator>/src/applications/files/uploadsource/PhabricatorFileUploadSource.php:47]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #10 PhabricatorFileUploadSource::uploadFile() called at [<phabricator>/src/applications/diffusion/query/filecontent/DiffusionFileContentQuery.php:73]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #11 DiffusionFileContentQuery::executeQuery() called at [<phabricator>/src/applications/diffusion/query/DiffusionQuery.php:88]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #12 DiffusionQuery::execute() called at [<phabricator>/src/applications/diffusion/conduit/DiffusionFileContentQueryConduitAPIMethod.php:42]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #13 DiffusionFileContentQueryConduitAPIMethod::getResult(ConduitAPIRequest) called at [<phabricator>/src/applications/diffusion/conduit/DiffusionQueryConduitAPIMethod.php:158]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #14 DiffusionQueryConduitAPIMethod::execute(ConduitAPIRequest) called at [<phabricator>/src/applications/conduit/method/ConduitAPIMethod.php:122]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #15 ConduitAPIMethod::executeMethod(ConduitAPIRequest) called at [<phabricator>/src/applications/conduit/call/ConduitCall.php:131]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #16 ConduitCall::executeMethod() called at [<phabricator>/src/applications/conduit/call/ConduitCall.php:81]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #17 ConduitCall::execute() called at [<phabricator>/src/applications/diffusion/query/DiffusionQuery.php:81]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #18 DiffusionQuery::callConduitWithDiffusionRequest(PhabricatorUser, DiffusionGitRequest, string, array) called at [<phabricator>/src/applications/differential/engine/DifferentialDiffExtractionEngine.php:158]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #19 DifferentialDiffExtractionEngine::isDiffChangedBeforeCommit(PhabricatorRepositoryCommit, DifferentialDiff, DifferentialDiff) called at [<phabricator>/src/applications/differential/engine/DifferentialDiffExtractionEngine.php:226]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #20 DifferentialDiffExtractionEngine::updateRevisionWithCommit(DifferentialRevision, PhabricatorRepositoryCommit, array, PhabricatorDaemonContentSource) called at [<phabricator>/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php:233]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #21 PhabricatorRepositoryCommitMessageParserWorker::updateCommitData(DiffusionCommitRef) called at [<phabricator>/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php:11]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #22 PhabricatorRepositoryGitCommitMessageParserWorker::parseCommitWithRef(PhabricatorRepository, PhabricatorRepositoryCommit, DiffusionCommitRef) called at [<phabricator>/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php:41]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #23 PhabricatorRepositoryCommitMessageParserWorker::parseCommit(PhabricatorRepository, PhabricatorRepositoryCommit) called at [<phabricator>/src/applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php:40]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #24 PhabricatorRepositoryCommitParserWorker::doWork() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorWorker.php:122]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #25 PhabricatorWorker::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php:171]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #26 PhabricatorWorkerActiveTask::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php:22]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #27 PhabricatorTaskmasterDaemon::run() called at [<phutil>/src/daemon/PhutilDaemon.php:183]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] #28 PhutilDaemon::execute() called at [<phutil>/scripts/daemon/exec/exec_daemon.php:125]
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] [2016-05-13 15:05:34] EXCEPTION: (PhutilProxyException) Error while executing Task ID 11477894. {>} (PhutilAggregateException) All storage engines failed to write file:
Daemon 108549 STDE [Fri, 13 May 2016 15:05:34 -0700] - PhabricatorLocalDiskFileStorageEngine: FilesystemException: Requested path '/opt/phabricator_files/c0/ce' is not writable. at [<phabricator>/src/applications/files/storage/PhabricatorFile.php:353]