Hi Antoine,
Yes, you are right in that UBA is a fairly generic file system virtualization and it might be fine to use clang-tidy distributed. I’m actually in the middle of a refactoring to make it more robust running remotely (The detoured NtCreateFile is horrendous).
The best way to test if something can run remotely out of the box is to use UbaCli as you have figured out. Here’s the command lines I’m using when doing development:
UbaCli.exe -workdir=<workdir> native <application> <commandline>
Workdir is the working directory for the application. “native” is the mode and does no detouring, it should always work.. if it doesn’t, then it is likely something is wrong with command line or something… application is obviously the application followed by its command lines.
Once this is working you can replace “native” with “local”. Local is making the application go through detouring.. this is the first step towards running remotely and do many of the optimizations to minimize kernel calls.
Next step is “agent”. agent is a mode where UbaCli spawns an UbaAgent internally in-proc. It should be very similar to running a separate agent but is a good way to iterate on issues etc.. being able to put breakpoints etc.
And last step is “remote”. Remote means that UbaCli waits for an UbaAgent to connect to it. You can test this mode locally by just spawn “UbaAgent.exe -host=localhost” on the same machine and it should work. After that you can take UbaAgent.exe and copy it to another machine to test so it works remotely.
ok, say all this is working, now you want to run multiple commands. This is where you can use a yaml file. Instead of having an <application> in the command line you can have a <.yaml> file and in that file you have the list of commands and their dependencies. You also want to change back to “local” mode with the yaml file to let the local machine help out.
Look at the bottom of UbaScheduler.h for syntax… or run UBT with -UBAActionsOutputFile=SomeFile.yaml to learn how the format is.
If you want to use horde as a coordinator you can as you say compile UbaCoordinatorHorde and use that. By default it should use all the configs you’ve setup in the unreal .ini files (It will not read BuildConfiguration.xml like UBT). This path is quite experimental since I’ve mainly used it to be able to run tsan and asan on uba (they don’t like dotnet applications). Once you have compiled UbaCoordinatorHorde you add -coordinator=Horde before the mode parameter
Hopefully you can get it to work
Good luck!
[Attachment Removed]