- try to create it as %L/dpb-$$ by default.
If we can't, no biggie. If the user explicitly asked for a control socket,
we DO abort otherwise.
- if CONTROL is explicitly empty, do not load the extra code.
- try to remove the socket at exit
- add a new wipehost command, that will try to kill any job on that host
(if some remain), then zap all locks and affinity info related to that host
"it's dead jim"
modify the PortBuilder -> Job::Port interface so that differences
are obvious.
tweak wipe to avoid wiping what we're currently actually running,
and also clean the "right" flavor in case we gave a wrong pkgpath name.
- create a proper writelock object, so that we can pinpoint where we
lock to it
- accordingly, new write_parent interface to deal with writing parent
to a lock
- pass the Logger through to lockinfo, so we log any errors anyhow
- properly deal with stale hostlocks
- categorize lockfile names
- tweak the find_dependencies interface to be less bizarre
- tweak find_tag as well, so that Job/Port can log accurate info for
still_untainted.
- have jobs get an explicit cleanup_after_fork interface, so in addition
to the signal handlers, port jobs also lose their fd on the lock
reuse in can_be_junked. As exemplified by editors/tiled, a failing
port with nojunk set should also prevent junk tentatives, as these
will fail, but still untaint hosts...
seen by aja@ and naddy@, most probably.
from removing them (so that we do less delete/re-add cycles, the more
cores you have the more relevant this becomes).
again, found on Yandex machines, thx to 12 cores or more.
- pass error condition from Job/Port.pm all the way to the engine
- use that to know whether we fail, instead of the existence of packages
(but still keep track of what we're doing correctly, THAT'S the fix)
- refactor error handling into OO version
- keep track of locks/errors/packages we're waiting for thx to nfs
all of these keep the lock around, and react to the lock being removed.
use case for nfs: if there was a revision bump after dpb scanned the port,
it will never find the package. Removing the lock will allow dpb to rescan
and find the correct packages.
with this, dpb no longer waits after nfs. More importantly, it does not
report nfs hangs as E:, rather as H:... (and it can "wait" for much longer
periods, since it keeps running and only checks on new jobs).
(it's easy to distinguish between a file and a directory under ports).
expand sequences for those files and hosts
when restarting dpb, kill locks that don't correspond to errors, but to a dpb
running on the same host that's no longer there.
do __WARN__ like __DIE__
option -DDONT_BUILD_ONCE
option -DDONT_CLEAN_LOCKS
document some
- clean up clock handling, jobs with timer.
- pass more parameters thru state
- tweak the engine to handle distfiles
- lots of new code in Fetch for new jobs.