[oe-commits] [openembedded-core] 01/04: sstate: Improve move into place op and touch file

git at git.openembedded.org git at git.openembedded.org
Mon Jan 13 13:09:50 UTC 2020


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master
in repository openembedded-core.

commit d8e9a22a4e23616ad01627c1e472296b1e26f13c
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Thu Dec 12 22:58:17 2019 +0000

    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 at linuxfoundation.org>
---
 meta/classes/sstate.bbclass | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 356fe7e..b4ffffc 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 () {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list