Automated build(jenkins) failing due to symlink check

We are seeing this issue on UnrealEngine 4.7.5
Periodically our jenkins builds start failing due to the following error. Our jenkins server is running Windows Server 2012 R2 Standard

InternalUtils.FindFiles: FindFiles e:\Epic Games\4.7\Engine\Binaries\ThirdParty\Ogg\Win64 *.dll True
InternalUtils.FindFiles: WARNING: Ignoring symlink e:\Epic Games\4.7\Engine\Binaries\ThirdParty\Ogg\Win64\VS2013\libogg_64.dll
ErrorReporter.Error: ERROR: AutomationTool error: No files found to deploy for e:\Epic Games\4.7\Engine\Binaries\ThirdParty\Ogg\Win64 with wildcard *.dll and exclusions 
BuildCommand.Execute: ERROR: BUILD FAILED
Program.Main: ERROR: AutomationTool terminated with exception:
Program.Main: ERROR: Exception in AutomationTool: No files found to deploy for e:\Epic Games\4.7\Engine\Binaries\ThirdParty\Ogg\Win64 with wildcard *.dll and exclusions 

It looks like this is the commit/change that introduced this symlink check for dealing with some symlink issues on linux.
https://github.com/EpicGames/UnrealEngine/commit/12fb93b1f3656007aaa60cdd805ec2d36280647f#diff-017eb044bbdf4774b533a4af9ab2dc4cR414

This looks to be related to the Windows 2012 deduplciation which uses Reparse Points to do the de-duplication.

I’m currently attempting to recompile the AutomationTool without this check to see if it builds.

I rebuilt AutomationTool without the symlink check, and it now works for me. What’s the best way to report a bug in that section of the AutomationTool. I could submit a pull request, but I don’t have any way to test the initial situation that code was made to fix.

I originally had this in the Packaging and Deployment section, but I’ve just moved it over to Bug Reports.

Hey ScottBrooks-

It sounds as though you were able to find a solution to the problem you were having, correct? As far as creating a bug report for the issue, could you provide some additional information? Is this occurring when building the engine or building a project? Is is specific to a single project or does it happen on new projects without any additional content? Does the failure still happen when not using Jenkins? Let me know if there’s anything else you can think of that would be helpful in reproducing this on my end.

Cheers

My solution was to comment out a block of code from the AutomationTool, and copy that exe to our server.

Here is the repro case that you would need in order to reproduce this on your end. It’s certainly not an easy repro case. I’ve included some URLs at the end for more information.

1: Have a Windows Server 2012 install
2: Enable de-duplication on one of the drives
3: Install UE4 to the drive that you have enabled de-duplcation on
4: Wait 5 days for the de-duplication to begin.
5: Attempt to build.

What’s happening underneath is that it looks like the AutomationTool skips any files that are links because of how it handles case sensitivity on Linux. The assumption was that linux would be the only platform with links. The windows server de-duplication uses this same feature to only store one copy of a file when there are multiple copies of the file on the system.

We could differentiate by the platform the tool is running on and only include symlinks on Windows. However, I seem to recall that UAT had more problems handling symlinks in general (even on Windows), although it might be specific to our build system (at some earlier point I had to remove symlinks from our P4 repository due to this).

I guess making a change that would allow symlinks on Windows only would be a good compromise solution. The original problem was caused by our workaround for case-sensitivity problems, when we used to create a symlink like Content/Maps/Blah.umap to a misspelled Content/Maps/blah.umap - UAT would pick up both files and then complain about the duplicates (because it compared them in a case-insensitive way). Current solution is thus a hack, it would be more proper to collect all duplicates and stage only those that aren’t symlinks.

That would certainly solve our problem.

To continue the hacking, you could try to open a file with alternate caps or something to detect if the file system is case sensitive, and then use that to detect if symlinks are allowed or not.

Ok, I made the change: https://github.com/EpicGames/UnrealEngine/commit/f33c1e438fbdc3e78bb147dd5479e8201c480ffa

Thanks for the suggestion regarding case sensitivity, it’s worth considering…

Ok, wonderful. Thanks.

I really appreciate the quick turn around, ability for people that can make the changes, and the access to the source that we get with the unreal engine.

You are welcome!