// Own members
JobManager* getJobManager(uid_t uid);
- std::vector<JobManager*> getAllJobManager();
+ std::vector<JobManager*> getUserJobManagers();
private:
IServiceRunner* __serviceRunner;
"SELECT jobId FROM " USED_ID_TABLE " ORDER BY jobID ASC",
COL_INT64, &columns, usedIds);
}
+
+void JobInfoDatabase::purgeJobOf(const std::string& owner)
+{
+ IF_FAIL_VOID(__database);
+
+ std::vector<std::shared_ptr<Tuple>> tableNames;
+ // Select all user job info table names
+ __database->execute(
+ "SELECT name FROM sqlite_master " \
+ " WHERE type='table'" \
+ " AND name != '" JOB_INFO_TABLE "_0'" \
+ " AND name LIKE '" JOB_INFO_TABLE "_%'",
+ &tableNames);
+
+ for (auto& tuple : tableNames) {
+ const char* name = NULL;
+
+ if (!tuple->getAt(0, &name))
+ continue;
+
+ char* query = sqlite3_mprintf("DELETE FROM [%s] WHERE owner='%s'", name, owner.c_str());
+ __database->execute(query, NULL);
+ sqlite3_free(query);
+ }
+}
bool getUsedIds(std::vector<std::shared_ptr<Tuple>>* usedIds);
+ // Remove all the jobs owned by the given owner from all users
+ static void purgeJobOf(const std::string& owner);
+
private:
uid_t __uid;
};
return it->second;
}
-std::vector<JobManager*> JobSchedulerService::getAllJobManager()
+std::vector<JobManager*> JobSchedulerService::getUserJobManagers()
{
std::vector<JobManager*> managers;
for (auto& it : __jobManagers) {
- managers.push_back(it.second);
+ if (!util::is_system(it.first))
+ managers.push_back(it.second);
}
return managers;
#include <SharedUtil.h>
#include <JobSchedulerService.h>
#include "JobManager.h"
+#include "JobInfoDatabase.h"
#include "OrphanedJobCleaner.h"
#define GLOBAL_APP_UID 376
return;
}
- std::vector<JobManager*> managers = __hostService->getAllJobManager();
+ std::vector<JobManager*> managers = __hostService->getUserJobManagers();
for (auto& manager : managers) {
manager->purgeJobOf(pkgId);
}
+
+ // Remove all jobs owned by pkgId from all tables (inc. inactive users)
+ JobInfoDatabase::purgeJobOf(pkgId);
}