Opened 8 years ago
Last modified 6 years ago
#3309 new enhancement
Avoid errors in parallel creation of tempfiles
Reported by: | sbl | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | 7.6.2 |
Component: | LibGIS | Version: | svn-releasebranch72 |
Keywords: | G_tempfile() startup init | Cc: | |
CPU: | Unspecified | Platform: | Unspecified |
Description
When tempfiles are created in parallel, conflicts and thus fatal errors can arise when two processes try to create the .tmp/HOST dir at the same time: https://lists.osgeo.org/pipermail/grass-dev/2017-March/084471.html
The conflict seems to arise only from the directory.
So, maybe it could help if the directory is created at the start of a GRASS session and removed only when the GRASS session is closed (exit)?
Change History (13)
follow-up: 2 comment:1 by , 8 years ago
comment:2 by , 8 years ago
Replying to mlennert:
Replying to sbl:
When tempfiles are created in parallel, conflicts and thus fatal errors can arise when two processes try to create the .tmp/HOST dir at the same time: https://lists.osgeo.org/pipermail/grass-dev/2017-March/084471.html
The conflict seems to arise only from the directory.
So, maybe it could help if the directory is created at the start of a GRASS session and removed only when the GRASS session is closed (exit)?
Now that you mention it, I can confirm that I've also been confronted to such errors when running commands in parallel that create temp files. So +1 to needing a solution.
Strange. When starting GRASS in text or GUI mode, the .tmp/HOST folder is automatically created, i.e. the error
ERROR: Unable to make mapset element .tmp/HOST (/grassdata/ETRS_33N/timseries/.tmp): File exists
should not happen, at least not in trunk and relb72.
I don't know though if the best is to create this directory once and for all at the startup, or whether the tempfile routines in lib/gis/tempfile.c could be modified to avoid such race conditions.
You could use
rm -f "`g.tempfile pid=$$`"
before running xargs, just to make sure that .tmp/HOST has been created.
comment:3 by , 8 years ago
I run the xargs command in a GRASS_BATCH_JOB in case that can be of relevance...
Will test if
rm -f "`g.tempfile pid=$$`"
helps and report back...
comment:4 by , 8 years ago
For the record:
Running
rm -f "`g.tempfile pid=$$`"
in advance works around the issue.
Using GRASS 7.2.1svn (r70188) in BATCH mode I do get the error message above. But if I run g.tempfile and make sure that the tmp directory is created before I run r.in.gdal through xargs, everything works just fine!
comment:5 by , 8 years ago
Milestone: | 7.2.1 → 7.2.2 |
---|
comment:6 by , 7 years ago
Milestone: | 7.2.2 → 7.4.0 |
---|
All enhancement tickets should be assigned to 7.4 milestone.
comment:8 by , 7 years ago
Milestone: | 7.4.1 → 7.4.2 |
---|
comment:10 by , 6 years ago
Keywords: | startup init added |
---|
comment:11 by , 6 years ago
Milestone: | 7.4.2 → 7.6.0 |
---|
All enhancement tickets should be assigned to 7.6 milestone.
Replying to sbl:
Now that you mention it, I can confirm that I've also been confronted to such errors when running commands in parallel that create temp files. So +1 to needing a solution.
I don't know though if the best is to create this directory once and for all at the startup, or whether the tempfile routines in lib/gis/tempfile.c could be modified to avoid such race conditions.