Browse Source

Komponentenverwaltung: Modul-Neuladen und Installables absichern

- Adminrechte beim Neueinlesen der Modul- und Jobdefinitionen prüfen
- Module ohne Install-/Upgrade-Job beim Einlesen überspringen
- Zusammenführen von Datei- und Datenbank-Jobs gegen null-Einträge absichern
- HTTP-500-Fehler bei /etl/installables/list vermeiden
master
Andre Knieschewski 4 hours ago
parent
commit
10d9757a50
  1. 7
      src/de/superx/rest/EtlJobApi.java
  2. 21
      src/de/superx/spring/service/EntityJobDescriptionSource.java
  3. 48
      src/de/superx/spring/service/JobAdapter.java

7
src/de/superx/rest/EtlJobApi.java

@ -189,9 +189,10 @@ public class EtlJobApi extends RestControllerBase {
return jobDescriptionSource.getJobsForComponent(abbreviation); return jobDescriptionSource.getJobsForComponent(abbreviation);
} }
@RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST) @RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST)
public boolean writeJobsToDb() { public boolean writeJobsToDb() {
try { userService.checkAdminRights();
try {
List<ContainerNode> jobs = entityJobDescriptionSource.readJobs(); List<ContainerNode> jobs = entityJobDescriptionSource.readJobs();
for (ContainerNode containerNode : jobs) { for (ContainerNode containerNode : jobs) {
try { try {

21
src/de/superx/spring/service/EntityJobDescriptionSource.java

@ -1005,15 +1005,18 @@ public class EntityJobDescriptionSource implements JobDescriptionSource {
} }
@Override @Override
public List<ContainerNode> readInstallJobs(List<String> components) { public List<ContainerNode> readInstallJobs(List<String> components) {
logger.debug("Reading install jobs from file system"); logger.debug("Reading install jobs from file system");
List<ContainerNode> jobs = new ArrayList<>(); List<ContainerNode> jobs = new ArrayList<>();
for (String componentAbbreviation : PathAndFileUtils.getModules()) { for (String componentAbbreviation : PathAndFileUtils.getModules()) {
jobs.add(getInstallUpgradeJob(componentAbbreviation)); ContainerNode job = getInstallUpgradeJob(componentAbbreviation);
} if (job != null) {
logger.debug("Count of jobs: " + jobs.size()); jobs.add(job);
return jobs; }
} }
logger.debug("Count of jobs: " + jobs.size());
return jobs;
}
public static ContainerNode getPreKernInstallJob() { public static ContainerNode getPreKernInstallJob() {
ContainerNode root = createContainerNode("kern_pre_install", "kern_pre_install", Integer.valueOf(9)); ContainerNode root = createContainerNode("kern_pre_install", "kern_pre_install", Integer.valueOf(9));

48
src/de/superx/spring/service/JobAdapter.java

@ -150,25 +150,31 @@ public class JobAdapter implements JobDescriptionSource {
} }
} }
public static List<ContainerNode> mergeJobsPreferringDatabase( public static List<ContainerNode> mergeJobsPreferringDatabase(
List<ContainerNode> jobsDatabase, List<ContainerNode> jobsDatabase,
List<ContainerNode> jobsFilesystem){ List<ContainerNode> jobsFilesystem) {
List<ContainerNode> result = new ArrayList<>(jobsDatabase); List<ContainerNode> result = new ArrayList<>(jobsDatabase);
for (ContainerNode jobFs : jobsFilesystem) { for (ContainerNode jobFs : jobsFilesystem) {
boolean isJobInDatabase = false; if (jobFs == null) {
for (ContainerNode jobDb : jobsDatabase) { logger.warn("Skipping null job from filesystem");
if(jobDb.name.equals(jobFs.name)) { continue;
isJobInDatabase = true; }
break;
} boolean isJobInDatabase = false;
} for (ContainerNode jobDb : jobsDatabase) {
if(!isJobInDatabase) { if (jobDb != null && jobDb.name.equals(jobFs.name)) {
result.add(jobFs); isJobInDatabase = true;
} break;
} }
return result; }
} if (!isJobInDatabase) {
result.add(jobFs);
}
}
return result;
}
} }

Loading…
Cancel
Save