summaryrefslogtreecommitdiffstats
path: root/meta/classes/sstate.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-12-12 22:58:17 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-01-13 13:06:51 +0000
commitd8e9a22a4e23616ad01627c1e472296b1e26f13c (patch)
tree37004898332326454404685e5690cd514bac551f /meta/classes/sstate.bbclass
parent5a0f6f631b86f7107aa72453b6d23f32ba39f713 (diff)
downloadopenembedded-core-d8e9a22a4e23616ad01627c1e472296b1e26f13c.tar.gz
sstate: Improve move into place op and touch file
Depending on the kernel and coreutils version, mv operations test for existence of files and can potentially race. It also leads to the file always changing which leads to potential problems if using and NFS share and there are other readers. Using ln instead means we don't overwrite the file if it already exists meaning other readers aren't disrupted and should work more reliably on NFS which is used for sstate on the autobuilder. Since we're not overwriting files, touch the file to show activity as would have been done it it were reused from sstate. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/sstate.bbclass')
-rw-r--r--meta/classes/sstate.bbclass6
1 files changed, 5 insertions, 1 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 356fe7ec18..b4ffffcd98 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -776,6 +776,7 @@ sstate_task_postfunc[dirs] = "${WORKDIR}"
sstate_create_package () {
# Exit early if it already exists
if [ -e ${SSTATE_PKG} ]; then
+ touch ${SSTATE_PKG}
return
fi
@@ -803,10 +804,13 @@ sstate_create_package () {
chmod 0664 $TFILE
# Skip if it was already created by some other process
if [ ! -e ${SSTATE_PKG} ]; then
- mv -f $TFILE ${SSTATE_PKG}
+ # Move into place using ln to attempt an atomic op.
+ # Abort if it already exists
+ ln $TFILE ${SSTATE_PKG} && rm $TFILE
else
rm $TFILE
fi
+ touch ${SSTATE_PKG}
}
python sstate_sign_package () {