mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
bitbake: bitbake-worker: Allow shutdown/database flush of pseudo server at task exit
We have a problem where pseudo server processes exist after bitbake exits and hold the pseudo database in memory. In a docker container, the processes will be killed as the container is destroyed with no warning and no opportunity to write the data to disk. This leads to permissions/inode corruptions and data loss. Send a shutdown message to pseudo which in new versions of pseudo will flush the database, thereby fixing some of the issues people using docker containers see. (Bitbake rev: a07a971b40acd3eee12e203d2cfa3e49f56109f6) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -17,6 +17,8 @@ import signal
|
|||||||
import pickle
|
import pickle
|
||||||
import traceback
|
import traceback
|
||||||
import queue
|
import queue
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
from multiprocessing import Lock
|
from multiprocessing import Lock
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
@@ -146,6 +148,7 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha
|
|||||||
# a fork() or exec*() activates PSEUDO...
|
# a fork() or exec*() activates PSEUDO...
|
||||||
|
|
||||||
envbackup = {}
|
envbackup = {}
|
||||||
|
fakeroot = False
|
||||||
fakeenv = {}
|
fakeenv = {}
|
||||||
umask = None
|
umask = None
|
||||||
|
|
||||||
@@ -165,6 +168,7 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha
|
|||||||
|
|
||||||
# We can't use the fakeroot environment in a dry run as it possibly hasn't been built
|
# We can't use the fakeroot environment in a dry run as it possibly hasn't been built
|
||||||
if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not dry_run:
|
if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not dry_run:
|
||||||
|
fakeroot = True
|
||||||
envvars = (workerdata["fakerootenv"][fn] or "").split()
|
envvars = (workerdata["fakerootenv"][fn] or "").split()
|
||||||
for key, value in (var.split('=') for var in envvars):
|
for key, value in (var.split('=') for var in envvars):
|
||||||
envbackup[key] = os.environ.get(key)
|
envbackup[key] = os.environ.get(key)
|
||||||
@@ -283,7 +287,11 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha
|
|||||||
try:
|
try:
|
||||||
if dry_run:
|
if dry_run:
|
||||||
return 0
|
return 0
|
||||||
return bb.build.exec_task(fn, taskname, the_data, cfg.profile)
|
ret = bb.build.exec_task(fn, taskname, the_data, cfg.profile)
|
||||||
|
if fakeroot:
|
||||||
|
fakerootcmd = shlex.split(the_data.getVar("FAKEROOTCMD"))
|
||||||
|
subprocess.run(fakerootcmd + ['-S'], check=True, stdout=subprocess.PIPE)
|
||||||
|
return ret
|
||||||
except:
|
except:
|
||||||
os._exit(1)
|
os._exit(1)
|
||||||
if not profiling:
|
if not profiling:
|
||||||
|
|||||||
Reference in New Issue
Block a user