Make jobstatus_map a shared pointer, hopefully resolving nullptr issues
This commit is contained in:
parent
a43739dfeb
commit
27da8b7df0
@ -312,7 +312,7 @@ PackageConf::PackageConf(int id, std::shared_ptr<Package> package, std::shared_p
|
|||||||
std::shared_ptr<GitCommit> packaging_commit, std::shared_ptr<GitCommit> upstream_commit)
|
std::shared_ptr<GitCommit> packaging_commit, std::shared_ptr<GitCommit> upstream_commit)
|
||||||
: id(id), package(package), release(release), branch(branch), packaging_commit(packaging_commit), upstream_commit(upstream_commit) {}
|
: id(id), package(package), release(release), branch(branch), packaging_commit(packaging_commit), upstream_commit(upstream_commit) {}
|
||||||
|
|
||||||
std::vector<std::shared_ptr<PackageConf>> PackageConf::get_package_confs(std::map<std::string, std::shared_ptr<JobStatus>> jobstatus_map) {
|
std::vector<std::shared_ptr<PackageConf>> PackageConf::get_package_confs(std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> jobstatus_map) {
|
||||||
Branch _tmp_brch = Branch();
|
Branch _tmp_brch = Branch();
|
||||||
Package _tmp_pkg = Package();
|
Package _tmp_pkg = Package();
|
||||||
Release _tmp_rel = Release();
|
Release _tmp_rel = Release();
|
||||||
@ -443,7 +443,7 @@ std::vector<std::shared_ptr<PackageConf>> PackageConf::get_package_confs(std::ma
|
|||||||
|
|
||||||
// Find the matching JobStatus
|
// Find the matching JobStatus
|
||||||
std::shared_ptr<JobStatus> jobstatus_ptr;
|
std::shared_ptr<JobStatus> jobstatus_ptr;
|
||||||
for (const auto &kv : jobstatus_map) {
|
for (const auto &kv : *jobstatus_map) {
|
||||||
if (kv.second && kv.second->id == jsid) {
|
if (kv.second && kv.second->id == jsid) {
|
||||||
jobstatus_ptr = kv.second;
|
jobstatus_ptr = kv.second;
|
||||||
break;
|
break;
|
||||||
@ -1180,7 +1180,7 @@ bool Task::compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>
|
|||||||
return lhs->id < rhs->id; // Earlier id first
|
return lhs->id < rhs->id; // Earlier id first
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::map<std::string, std::shared_ptr<JobStatus>> job_statuses, int page, int per_page) {
|
std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses, int page, int per_page) {
|
||||||
std::set<std::shared_ptr<Task>> result;
|
std::set<std::shared_ptr<Task>> result;
|
||||||
|
|
||||||
if (per_page < 1) { per_page = 1; }
|
if (per_page < 1) { per_page = 1; }
|
||||||
@ -1206,7 +1206,7 @@ std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::share
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto status : job_statuses) {
|
for (auto status : *job_statuses) {
|
||||||
if (status.second->id == query.value("jobstatus_id").toInt()) {
|
if (status.second->id == query.value("jobstatus_id").toInt()) {
|
||||||
this_task.jobstatus = status.second;
|
this_task.jobstatus = status.second;
|
||||||
break;
|
break;
|
||||||
|
@ -157,7 +157,7 @@ public:
|
|||||||
|
|
||||||
PackageConf(int id = 0, std::shared_ptr<Package> package = NULL, std::shared_ptr<Release> release = NULL, std::shared_ptr<Branch> branch = NULL,
|
PackageConf(int id = 0, std::shared_ptr<Package> package = NULL, std::shared_ptr<Release> release = NULL, std::shared_ptr<Branch> branch = NULL,
|
||||||
std::shared_ptr<GitCommit> packaging_commit = NULL, std::shared_ptr<GitCommit> upstream_commit = NULL);
|
std::shared_ptr<GitCommit> packaging_commit = NULL, std::shared_ptr<GitCommit> upstream_commit = NULL);
|
||||||
std::vector<std::shared_ptr<PackageConf>> get_package_confs(std::map<std::string, std::shared_ptr<JobStatus>> jobstatus_map);
|
std::vector<std::shared_ptr<PackageConf>> get_package_confs(std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> jobstatus_map);
|
||||||
std::vector<std::shared_ptr<PackageConf>> get_package_confs_by_package_name(std::vector<std::shared_ptr<PackageConf>> packageconfs,
|
std::vector<std::shared_ptr<PackageConf>> get_package_confs_by_package_name(std::vector<std::shared_ptr<PackageConf>> packageconfs,
|
||||||
const std::string& package_name);
|
const std::string& package_name);
|
||||||
void assign_task(std::shared_ptr<JobStatus> jobstatus, std::shared_ptr<Task> task_ptr, std::weak_ptr<PackageConf> packageconf_ptr);
|
void assign_task(std::shared_ptr<JobStatus> jobstatus, std::shared_ptr<Task> task_ptr, std::weak_ptr<PackageConf> packageconf_ptr);
|
||||||
@ -212,7 +212,7 @@ public:
|
|||||||
Task(std::shared_ptr<JobStatus> jobstatus, std::int64_t time, std::shared_ptr<PackageConf> packageconf);
|
Task(std::shared_ptr<JobStatus> jobstatus, std::int64_t time, std::shared_ptr<PackageConf> packageconf);
|
||||||
Task();
|
Task();
|
||||||
|
|
||||||
std::set<std::shared_ptr<Task>> get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::map<std::string, std::shared_ptr<JobStatus>> job_statuses, int page, int per_page);
|
std::set<std::shared_ptr<Task>> get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses, int page, int per_page);
|
||||||
void save(int _packageconf_id = 0);
|
void save(int _packageconf_id = 0);
|
||||||
|
|
||||||
std::shared_ptr<PackageConf> get_parent_packageconf() const {
|
std::shared_ptr<PackageConf> get_parent_packageconf() const {
|
||||||
|
@ -1121,7 +1121,7 @@ std::vector<std::shared_ptr<PackageConf>> CiLogic::get_config(const std::string
|
|||||||
|
|
||||||
std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>> repos,
|
std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>> repos,
|
||||||
std::unique_ptr<TaskQueue>& task_queue,
|
std::unique_ptr<TaskQueue>& task_queue,
|
||||||
const std::map<std::string, std::shared_ptr<JobStatus>> job_statuses) {
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses) {
|
||||||
std::string msg;
|
std::string msg;
|
||||||
std::map<std::string, std::shared_ptr<package_conf_item>> encountered_items;
|
std::map<std::string, std::shared_ptr<package_conf_item>> encountered_items;
|
||||||
std::mutex task_assignment_mutex;
|
std::mutex task_assignment_mutex;
|
||||||
@ -1137,8 +1137,8 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
|
|||||||
std::lock_guard<std::mutex> lock(task_assignment_mutex);
|
std::lock_guard<std::mutex> lock(task_assignment_mutex);
|
||||||
is_ghost_pull = true;
|
is_ghost_pull = true;
|
||||||
|
|
||||||
r->assign_task(job_statuses.at("pull"), found_it->second->first_pull_task, r);
|
r->assign_task(job_statuses->at("pull"), found_it->second->first_pull_task, r);
|
||||||
r->assign_task(job_statuses.at("tarball"), found_it->second->first_tarball_task, r);
|
r->assign_task(job_statuses->at("tarball"), found_it->second->first_tarball_task, r);
|
||||||
r->packaging_commit = found_it->second->packaging_commit;
|
r->packaging_commit = found_it->second->packaging_commit;
|
||||||
r->upstream_commit = found_it->second->upstream_commit;
|
r->upstream_commit = found_it->second->upstream_commit;
|
||||||
sync(r);
|
sync(r);
|
||||||
@ -1148,24 +1148,24 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
|
|||||||
|
|
||||||
std::shared_ptr<Task> tarball_task = std::make_shared<Task>();
|
std::shared_ptr<Task> tarball_task = std::make_shared<Task>();
|
||||||
task_queue->enqueue(
|
task_queue->enqueue(
|
||||||
job_statuses.at("pull"),
|
job_statuses->at("pull"),
|
||||||
[this, r, &task_queue, tarball_task, job_statuses](std::shared_ptr<Log> log) mutable {
|
[this, r, &task_queue, tarball_task, job_statuses](std::shared_ptr<Log> log) mutable {
|
||||||
std::shared_ptr<PackageConf> pkgconf = log->get_task_context()->get_parent_packageconf();
|
std::shared_ptr<PackageConf> pkgconf = log->get_task_context()->get_parent_packageconf();
|
||||||
if (pull_project(pkgconf, log)) {
|
if (pull_project(pkgconf, log)) {
|
||||||
task_queue->enqueue(
|
task_queue->enqueue(
|
||||||
job_statuses.at("tarball"),
|
job_statuses->at("tarball"),
|
||||||
[this, r](std::shared_ptr<Log> log) mutable {
|
[this, r](std::shared_ptr<Log> log) mutable {
|
||||||
bool tarball_ok = create_project_tarball(r, log);
|
bool tarball_ok = create_project_tarball(r, log);
|
||||||
},
|
},
|
||||||
r
|
r
|
||||||
);
|
);
|
||||||
tarball_task = r->get_task_by_jobstatus(job_statuses.at("tarball"));
|
tarball_task = r->get_task_by_jobstatus(job_statuses->at("tarball"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
r
|
r
|
||||||
);
|
);
|
||||||
|
|
||||||
new_item->first_pull_task = r->get_task_by_jobstatus(job_statuses.at("pull"));
|
new_item->first_pull_task = r->get_task_by_jobstatus(job_statuses->at("pull"));
|
||||||
new_item->first_tarball_task = tarball_task;
|
new_item->first_tarball_task = tarball_task;
|
||||||
new_item->first_pkgconf = r;
|
new_item->first_pkgconf = r;
|
||||||
|
|
||||||
@ -1183,18 +1183,18 @@ std::string CiLogic::queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>
|
|||||||
|
|
||||||
std::string CiLogic::queue_build_upload(std::vector<std::shared_ptr<PackageConf>> repos,
|
std::string CiLogic::queue_build_upload(std::vector<std::shared_ptr<PackageConf>> repos,
|
||||||
std::unique_ptr<TaskQueue>& task_queue,
|
std::unique_ptr<TaskQueue>& task_queue,
|
||||||
const std::map<std::string, std::shared_ptr<JobStatus>> job_statuses) {
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses) {
|
||||||
std::string msg;
|
std::string msg;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (auto r : repos) {
|
for (auto r : repos) {
|
||||||
task_queue->enqueue(
|
task_queue->enqueue(
|
||||||
job_statuses.at("source_build"),
|
job_statuses->at("source_build"),
|
||||||
[this, r, &task_queue, job_statuses](std::shared_ptr<Log> log) mutable {
|
[this, r, &task_queue, job_statuses](std::shared_ptr<Log> log) mutable {
|
||||||
auto [build_ok, changes_files] = build_project(r, log);
|
auto [build_ok, changes_files] = build_project(r, log);
|
||||||
if (build_ok) {
|
if (build_ok) {
|
||||||
task_queue->enqueue(
|
task_queue->enqueue(
|
||||||
job_statuses.at("upload"),
|
job_statuses->at("upload"),
|
||||||
[this, r, changes_files](std::shared_ptr<Log> log) mutable {
|
[this, r, changes_files](std::shared_ptr<Log> log) mutable {
|
||||||
bool upload_ok = upload_and_lint(r, changes_files, false, log);
|
bool upload_ok = upload_and_lint(r, changes_files, false, log);
|
||||||
(void)upload_ok;
|
(void)upload_ok;
|
||||||
@ -1214,10 +1214,11 @@ std::string CiLogic::queue_build_upload(std::vector<std::shared_ptr<PackageConf>
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, std::shared_ptr<JobStatus>> CiLogic::get_job_statuses() {
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> CiLogic::get_job_statuses() {
|
||||||
if (!_cached_job_statuses.empty()) { return _cached_job_statuses; }
|
if (_cached_job_statuses != nullptr) { return _cached_job_statuses; }
|
||||||
|
|
||||||
static const std::map<std::string, std::shared_ptr<JobStatus>> statuses = {
|
static const auto statuses = std::make_shared<std::map<std::string, std::shared_ptr<JobStatus>>>(
|
||||||
|
std::map<std::string, std::shared_ptr<JobStatus>>{
|
||||||
{"pull", std::make_shared<JobStatus>(JobStatus(1))},
|
{"pull", std::make_shared<JobStatus>(JobStatus(1))},
|
||||||
{"tarball", std::make_shared<JobStatus>(JobStatus(2))},
|
{"tarball", std::make_shared<JobStatus>(JobStatus(2))},
|
||||||
{"source_build", std::make_shared<JobStatus>(JobStatus(3))},
|
{"source_build", std::make_shared<JobStatus>(JobStatus(3))},
|
||||||
@ -1226,7 +1227,9 @@ std::map<std::string, std::shared_ptr<JobStatus>> CiLogic::get_job_statuses() {
|
|||||||
{"build_check", std::make_shared<JobStatus>(JobStatus(6))},
|
{"build_check", std::make_shared<JobStatus>(JobStatus(6))},
|
||||||
{"lintian", std::make_shared<JobStatus>(JobStatus(7))},
|
{"lintian", std::make_shared<JobStatus>(JobStatus(7))},
|
||||||
{"britney", std::make_shared<JobStatus>(JobStatus(8))}
|
{"britney", std::make_shared<JobStatus>(JobStatus(8))}
|
||||||
};
|
}
|
||||||
|
);
|
||||||
|
|
||||||
_cached_job_statuses = statuses;
|
_cached_job_statuses = statuses;
|
||||||
return statuses;
|
return statuses;
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ class CiLogic {
|
|||||||
// Fetch logs for a specific PackageConf ID
|
// Fetch logs for a specific PackageConf ID
|
||||||
std::string get_logs_for_repo_conf(int package_conf_id);
|
std::string get_logs_for_repo_conf(int package_conf_id);
|
||||||
|
|
||||||
std::map<std::string, std::shared_ptr<JobStatus>> get_job_statuses();
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> get_job_statuses();
|
||||||
std::vector<std::shared_ptr<PackageConf>> get_packageconfs();
|
std::vector<std::shared_ptr<PackageConf>> get_packageconfs();
|
||||||
std::shared_ptr<PackageConf> get_packageconf_by_id(int id);
|
std::shared_ptr<PackageConf> get_packageconf_by_id(int id);
|
||||||
std::vector<std::shared_ptr<PackageConf>> get_packageconfs_by_ids(std::set<int> ids);
|
std::vector<std::shared_ptr<PackageConf>> get_packageconfs_by_ids(std::set<int> ids);
|
||||||
@ -96,10 +96,10 @@ class CiLogic {
|
|||||||
|
|
||||||
std::string queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>> repos,
|
std::string queue_pull_tarball(std::vector<std::shared_ptr<PackageConf>> repos,
|
||||||
std::unique_ptr<TaskQueue>& task_queue,
|
std::unique_ptr<TaskQueue>& task_queue,
|
||||||
const std::map<std::string, std::shared_ptr<JobStatus>> job_statuses);
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses);
|
||||||
std::string queue_build_upload(std::vector<std::shared_ptr<PackageConf>> repos,
|
std::string queue_build_upload(std::vector<std::shared_ptr<PackageConf>> repos,
|
||||||
std::unique_ptr<TaskQueue>& task_queue,
|
std::unique_ptr<TaskQueue>& task_queue,
|
||||||
const std::map<std::string, std::shared_ptr<JobStatus>> job_statuses);
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses);
|
||||||
|
|
||||||
std::vector<Release> releases;
|
std::vector<Release> releases;
|
||||||
std::vector<Package> packages;
|
std::vector<Package> packages;
|
||||||
@ -112,7 +112,7 @@ class CiLogic {
|
|||||||
|
|
||||||
mutable std::mutex packageconfs_mutex_;
|
mutable std::mutex packageconfs_mutex_;
|
||||||
std::vector<std::shared_ptr<PackageConf>> packageconfs;
|
std::vector<std::shared_ptr<PackageConf>> packageconfs;
|
||||||
std::map<std::string, std::shared_ptr<JobStatus>> _cached_job_statuses;
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> _cached_job_statuses;
|
||||||
|
|
||||||
struct package_conf_item {
|
struct package_conf_item {
|
||||||
std::shared_ptr<PackageConf> first_pkgconf;
|
std::shared_ptr<PackageConf> first_pkgconf;
|
||||||
|
@ -176,7 +176,7 @@ bool WebServer::start_server(quint16 port) {
|
|||||||
std::shared_ptr<LubuntuCI> lubuntuci = std::make_shared<LubuntuCI>();
|
std::shared_ptr<LubuntuCI> lubuntuci = std::make_shared<LubuntuCI>();
|
||||||
std::vector<std::shared_ptr<PackageConf>> all_repos = lubuntuci->list_known_repos();
|
std::vector<std::shared_ptr<PackageConf>> all_repos = lubuntuci->list_known_repos();
|
||||||
task_queue = std::make_unique<TaskQueue>(10);
|
task_queue = std::make_unique<TaskQueue>(10);
|
||||||
std::map<std::string, std::shared_ptr<JobStatus>> job_statuses = lubuntuci->cilogic.get_job_statuses();
|
std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses = lubuntuci->cilogic.get_job_statuses();
|
||||||
task_queue->start();
|
task_queue->start();
|
||||||
|
|
||||||
// Load initial tokens
|
// Load initial tokens
|
||||||
@ -219,7 +219,7 @@ bool WebServer::start_server(quint16 port) {
|
|||||||
if (!pkgconf->can_check_source_upload()) { continue; }
|
if (!pkgconf->can_check_source_upload()) { continue; }
|
||||||
|
|
||||||
task_queue->enqueue(
|
task_queue->enqueue(
|
||||||
job_statuses.at("source_check"),
|
job_statuses->at("source_check"),
|
||||||
[this, proposed](std::shared_ptr<Log> log) mutable {
|
[this, proposed](std::shared_ptr<Log> log) mutable {
|
||||||
std::shared_ptr<PackageConf> pkgconf = log->get_task_context()->get_parent_packageconf();
|
std::shared_ptr<PackageConf> pkgconf = log->get_task_context()->get_parent_packageconf();
|
||||||
std::string package_version = pkgconf->upstream_version + "-0ubuntu0~ppa" + std::to_string(pkgconf->ppa_revision);
|
std::string package_version = pkgconf->upstream_version + "-0ubuntu0~ppa" + std::to_string(pkgconf->ppa_revision);
|
||||||
@ -524,7 +524,7 @@ bool WebServer::start_server(quint16 port) {
|
|||||||
item["upstream_commit_url"] = upstream_commit_url_str;
|
item["upstream_commit_url"] = upstream_commit_url_str;
|
||||||
|
|
||||||
// For each job in the map, fetch the real task and set a CSS class accordingly.
|
// For each job in the map, fetch the real task and set a CSS class accordingly.
|
||||||
for (auto const & [job_name, job_ptr] : job_statuses) {
|
for (auto const & [job_name, job_ptr] : *job_statuses) {
|
||||||
auto t = r->get_task_by_jobstatus(job_ptr);
|
auto t = r->get_task_by_jobstatus(job_ptr);
|
||||||
if (t) {
|
if (t) {
|
||||||
std::string css_class = "bg-secondary"; // default
|
std::string css_class = "bg-secondary"; // default
|
||||||
@ -901,8 +901,6 @@ bool WebServer::start_server(quint16 port) {
|
|||||||
std::set<std::shared_ptr<Task>, Task::TaskComparator> final_tasks;
|
std::set<std::shared_ptr<Task>, Task::TaskComparator> final_tasks;
|
||||||
std::string title_prefix;
|
std::string title_prefix;
|
||||||
|
|
||||||
static const std::map<std::string, std::shared_ptr<JobStatus>> job_statuses = lubuntuci->cilogic.get_job_statuses();
|
|
||||||
|
|
||||||
if (type.empty()) {
|
if (type.empty()) {
|
||||||
// default to 'running'
|
// default to 'running'
|
||||||
title_prefix = "Running";
|
title_prefix = "Running";
|
||||||
@ -916,7 +914,7 @@ bool WebServer::start_server(quint16 port) {
|
|||||||
std::vector<std::shared_ptr<Task>> tasks_vector;
|
std::vector<std::shared_ptr<Task>> tasks_vector;
|
||||||
auto pkgconfs = lubuntuci->cilogic.get_packageconfs();
|
auto pkgconfs = lubuntuci->cilogic.get_packageconfs();
|
||||||
for (auto &pkgconf : pkgconfs) {
|
for (auto &pkgconf : pkgconfs) {
|
||||||
for (auto &j : job_statuses) {
|
for (auto &j : *job_statuses) {
|
||||||
if (!j.second) {
|
if (!j.second) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user