Any idea why I have the error : The system cannot find the path specified: '.sconsign.tmp' -> '.sconsign.dblite': #4481
-
Hello, I am using a Docker container to build our windows program with 14.1. When I compile on release, everything is working fine, then when I compile debug, I got this:
It does the the same thing the other way around (compiling first debug, then release). So, it looks like scons is not able to copy .sconsign.tmp to .sconsign.dblite, which is weird, because I can clearly see that those 2 files are present in the folder. This problem doesn't occur when I compile directly on the host (outside the container). I am wondering if it could be a user permission issue. |
Beta Was this translation helpful? Give feedback.
Replies: 7 comments 4 replies
-
Is this an old SCons version? The line numbers don't line up with what I'm looking at, and there has been some work in this module recently. Yes, it smells a bit like a permission error, but in fact in the sync() method the file rename from temporary to permanent is wrapped in a try block that catches |
Beta Was this translation helpful? Give feedback.
-
I am using 4.5.2. I did multiple test and looks like everything is fine when I am using -j8 instead of -j12. Weird. So, the first -j12 in debug is working fine. Then, the next -j12 generate the error above. If compiling with -j8, no error. I'll do further test to make sure... |
Beta Was this translation helpful? Give feedback.
-
Someday we'll get off this hack of dumping the whole in-memory signature database to a file all in one go on process shutdown, and depending on |
Beta Was this translation helpful? Give feedback.
-
@bdbaddog Yes, I am 100% sure that I have just one container and one compilation running.
Config : 1. Test 1, compiling source code on host systemEverything is compiling fine with -j16, both debug and release, vice-versa, no problems 2. Test 2, copying source code inside container, compiling inside the containerEverything is compiling fine with -j16, both debug and release, vice-versa, no problems 3. Test 3 source code on host, compiling inside the container, with a mount between container and source codeI have the problem that I mentioned above. The only way to make debug and release to compile with no problem is by doing 4. Ultimate test 4 on another pc, source code on host, compiling inside the container, with a mount between container and source codeOther pc config: And now, Everything is compiling fine with -j16, both debug and release, vice-versa, no problems!!! So, the error message I have on my I5 looks like a race condition, but I don`t think it is the problem. I suspect a permission problem with the user of the container that tries to replace a file on the mount that is also located on the host. |
Beta Was this translation helpful? Give feedback.
-
That detailed work is useful. Not quite sure how mounts work that have you reaching outside the container, and if there might be some special considerations, either performance-wise or permission-wise. |
Beta Was this translation helpful? Give feedback.
-
You could experiment with putting the sconsign file somewhere else - inside the container. I think you can only do this programmatically ( |
Beta Was this translation helpful? Give feedback.
-
FWIW, your usage might, or might not, be appropriate for |
Beta Was this translation helpful? Give feedback.
Nice, I did not know about
SConsignFile
! I added do this in mySConstruct
for testing purpose:SConsignFile("C:/TEMP/.sconsign")
C:/TEMP
is a folder in my container only, not accessible outside to the host. Now everything is compiling fine within the container with-j16
on both debug and release. Problem fixed!Thx!