Merge pull request #1457 from aws-lumberyard-dev/Helios_FixCacheCopyFailure

[LYN-4508] Fix AP cache copy failure
This commit is contained in:
amzn-mike
2021-06-23 15:35:59 -05:00
committed by GitHub
2 changed files with 13 additions and 21 deletions
@@ -782,16 +782,6 @@ namespace AssetProcessor
}
// if we get here, we are good to go in terms of disk space and sources existing, so we make the best attempt we can.
// first, we broadcast the name of ALL of the outputs we are about to change:
for (const QPair<QString, QString>& filePair : outputsToCopy)
{
const QString& productAbsolutePath = filePair.second;
// note that this absolute path is a real file system path, and the following API requires normalized paths:
QString normalized = AssetUtilities::NormalizeFilePath(productAbsolutePath);
AssetProcessor::ProcessingJobInfoBus::Broadcast(&AssetProcessor::ProcessingJobInfoBus::Events::BeginCacheFileUpdate, normalized.toUtf8().constData());
}
// after we do the above notify its important that we do not early exit this function without undoing those locks.
bool anyFileFailed = false;
@@ -815,16 +805,6 @@ namespace AssetProcessor
AZ_TracePrintf(AssetBuilderSDK::WarningWindow, "Unable to change permission for the file: %s.\n", productAbsolutePath.toUtf8().data());
}
}
// once we're done, regardless of success or failure, we 'unlock' those files for further process.
// if we failed, also re-trigger them to rebuild (the bool param at the end of the ebus call)
for (const QPair<QString, QString>& filePair : outputsToCopy)
{
const QString& productAbsolutePath = filePair.second;
// note that this absolute path is a real file system path, and the following API requires normalized paths:
QString normalized = AssetUtilities::NormalizeFilePath(productAbsolutePath);
AssetProcessor::ProcessingJobInfoBus::Broadcast(&AssetProcessor::ProcessingJobInfoBus::Events::EndCacheFileUpdate, normalized.toUtf8().constData(), anyFileFailed);
}
return !anyFileFailed;
}
@@ -83,6 +83,10 @@ namespace AssetUtilsInternal
timer.start();
do
{
QString normalized = AssetUtilities::NormalizeFilePath(outputFile);
AssetProcessor::ProcessingJobInfoBus::Broadcast(
&AssetProcessor::ProcessingJobInfoBus::Events::BeginCacheFileUpdate, normalized.toUtf8().constData());
//Removing the old file if it exists
if (outFile.exists())
{
@@ -133,11 +137,19 @@ namespace AssetUtilsInternal
}
}
} while (!timer.hasExpired(waitTimeInSeconds * 1000)); //We will keep retrying until the timer has expired the inputted timeout
// once we're done, regardless of success or failure, we 'unlock' those files for further process.
// if we failed, also re-trigger them to rebuild (the bool param at the end of the ebus call)
QString normalized = AssetUtilities::NormalizeFilePath(outputFile);
AssetProcessor::ProcessingJobInfoBus::Broadcast(
&AssetProcessor::ProcessingJobInfoBus::Events::EndCacheFileUpdate, normalized.toUtf8().constData(), !operationSucceeded);
if (!operationSucceeded)
{
//operation failed for the given timeout
AZ_Warning(AssetProcessor::ConsoleChannel, false, "WARNING: Could not copy/move source %s to %s, giving up\n", sourceFile.toUtf8().constData(), outputFile.toUtf8().constData());
AZ_Warning(AssetProcessor::ConsoleChannel, false, "WARNING: Could not %s source from %s to %s, giving up\n",
isCopy ? "copy" : "move (via rename)",
sourceFile.toUtf8().constData(), outputFile.toUtf8().constData());
return false;
}
else if (failureOccurredOnce)