mirror of
https://github.com/ohwgiles/laminar.git
synced 2024-10-27 20:34:20 +00:00
resolves #22: allow keeping N rundirs
This replaces LAMINAR_KEEP_RUNDIR (bool) with LAMINAR_KEEP_RUNDIRS (int)
This commit is contained in:
parent
74443c292a
commit
76e0e9e62a
@ -490,7 +490,7 @@ make
|
|||||||
- `LAMINAR_BIND_HTTP`: The interface/port or unix socket on which `laminard` should listen for incoming connections to the web frontend. Default `*:8080`
|
- `LAMINAR_BIND_HTTP`: The interface/port or unix socket on which `laminard` should listen for incoming connections to the web frontend. Default `*:8080`
|
||||||
- `LAMINAR_BIND_RPC`: The interface/port or unix socket on which `laminard` should listen for incoming commands such as build triggers. Default `unix-abstract:laminar`
|
- `LAMINAR_BIND_RPC`: The interface/port or unix socket on which `laminard` should listen for incoming commands such as build triggers. Default `unix-abstract:laminar`
|
||||||
- `LAMINAR_TITLE`: The page title to show in the web frontend.
|
- `LAMINAR_TITLE`: The page title to show in the web frontend.
|
||||||
- `LAMINAR_KEEP_RUNDIR`: If set, do not delete run directories after completion
|
- `LAMINAR_KEEP_RUNDIRS`: Set to an integer defining how many rundirs to keep per job. The lowest-numbered ones will be deleted. The default is 0, meaning all run dirs will be immediately deleted.
|
||||||
- `LAMINAR_ARCHIVE_URL`: If set, the web frontend served by `laminard` will use this URL to form links to artefacts archived jobs. Must be synchronized with web server configuration.
|
- `LAMINAR_ARCHIVE_URL`: If set, the web frontend served by `laminard` will use this URL to form links to artefacts archived jobs. Must be synchronized with web server configuration.
|
||||||
|
|
||||||
### Script execution order
|
### Script execution order
|
||||||
|
11
laminar.conf
11
laminar.conf
@ -33,12 +33,15 @@
|
|||||||
#LAMINAR_TITLE=
|
#LAMINAR_TITLE=
|
||||||
|
|
||||||
###
|
###
|
||||||
### LAMINAR_KEEP_RUNDIR
|
### LAMINAR_KEEP_RUNDIRS
|
||||||
###
|
###
|
||||||
### If set (to anything), the job rundir $LAMINAR_HOME/run/$JOB/$RUN
|
### Setting this prevents the immediate deletion of job rundirs
|
||||||
### will not be deleted after the run has completed
|
### $LAMINAR_HOME/run/$JOB/$RUN. Value should be an integer represeting
|
||||||
|
### the number of rundirs to keep.
|
||||||
###
|
###
|
||||||
#LAMINAR_KEEP_RUNDIR=1
|
### Default: 0
|
||||||
|
###
|
||||||
|
#LAMINAR_KEEP_RUNDIRS=0
|
||||||
|
|
||||||
###
|
###
|
||||||
### LAMINAR_ARCHIVE_URL
|
### LAMINAR_ARCHIVE_URL
|
||||||
|
@ -73,7 +73,7 @@ Laminar::Laminar() {
|
|||||||
archiveUrl = ARCHIVE_URL_DEFAULT;
|
archiveUrl = ARCHIVE_URL_DEFAULT;
|
||||||
if(char* envArchive = getenv("LAMINAR_ARCHIVE_URL"))
|
if(char* envArchive = getenv("LAMINAR_ARCHIVE_URL"))
|
||||||
archiveUrl = envArchive;
|
archiveUrl = envArchive;
|
||||||
eraseRunDir = true;
|
numKeepRunDirs = 0;
|
||||||
homeDir = getenv("LAMINAR_HOME") ?: "/var/lib/laminar";
|
homeDir = getenv("LAMINAR_HOME") ?: "/var/lib/laminar";
|
||||||
|
|
||||||
db = new Database((fs::path(homeDir)/"laminar.sqlite").string().c_str());
|
db = new Database((fs::path(homeDir)/"laminar.sqlite").string().c_str());
|
||||||
@ -393,8 +393,8 @@ void Laminar::stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Laminar::loadConfiguration() {
|
bool Laminar::loadConfiguration() {
|
||||||
if(getenv("LAMINAR_KEEP_RUNDIR"))
|
if(const char* ndirs = getenv("LAMINAR_KEEP_RUNDIRS"))
|
||||||
eraseRunDir = false;
|
numKeepRunDirs = atoi(ndirs);
|
||||||
|
|
||||||
NodeMap nm;
|
NodeMap nm;
|
||||||
|
|
||||||
@ -757,12 +757,28 @@ void Laminar::runFinished(Run * r) {
|
|||||||
w->complete(r);
|
w->complete(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove the rundir
|
// erase reference to run from activeJobs
|
||||||
if(eraseRunDir)
|
|
||||||
fs::remove_all(r->runDir);
|
|
||||||
|
|
||||||
// will delete the job
|
|
||||||
activeJobs.get<2>().erase(r);
|
activeJobs.get<2>().erase(r);
|
||||||
|
|
||||||
|
// remove old run directories
|
||||||
|
// We cannot count back the number of directories to keep from the currently
|
||||||
|
// finishing job because there may well be older, still-running instances of
|
||||||
|
// this job and we don't want to delete their rundirs. So instead, check
|
||||||
|
// whether there are any more active runs of this job, and if so, count back
|
||||||
|
// from the oldest among them. If there are none, count back from the latest
|
||||||
|
// known build number of this job, which may not be that of the run that
|
||||||
|
// finished here.
|
||||||
|
auto it = activeJobs.get<4>().equal_range(r->name);
|
||||||
|
uint oldestActive = (it.first == it.second)? buildNums[r->name] : (*it.first)->build - 1;
|
||||||
|
for(int i = oldestActive - numKeepRunDirs; i > 0; i--) {
|
||||||
|
fs::path d = fs::path(homeDir)/"run"/r->name/std::to_string(i);
|
||||||
|
// Once the directory does not exist, it's probably not worth checking
|
||||||
|
// any further. 99% of the time this loop should only ever have 1 iteration
|
||||||
|
// anyway so hence this (admittedly debatable) optimization.
|
||||||
|
if(!fs::exists(d))
|
||||||
|
break;
|
||||||
|
fs::remove_all(d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Laminar::getArtefact(std::string path, std::string& result) {
|
bool Laminar::getArtefact(std::string path, std::string& result) {
|
||||||
|
@ -85,7 +85,7 @@ private:
|
|||||||
std::string homeDir;
|
std::string homeDir;
|
||||||
std::set<LaminarClient*> clients;
|
std::set<LaminarClient*> clients;
|
||||||
std::set<LaminarWaiter*> waiters;
|
std::set<LaminarWaiter*> waiters;
|
||||||
bool eraseRunDir;
|
uint numKeepRunDirs;
|
||||||
std::string archiveUrl;
|
std::string archiveUrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user