From 736056ff29004d94bd188dfdd3743ae2d19261d2 Mon Sep 17 00:00:00 2001 From: Tristan Date: Sat, 22 Jul 2023 09:05:24 +0200 Subject: [PATCH 01/13] Test Own Scheduler Pod --- .gitignore | 1 + src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 2e0f9123..2572169f 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,4 @@ fabric.properties target pom-development.xml +.vscode/settings.json diff --git a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java index 726c4b72..27529730 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java @@ -385,6 +385,7 @@ boolean assignTaskToNode( NodeTaskAlignment alignment ){ pod.getSpec().setNodeName( alignment.node.getMetadata().getName() ); log.info ( "Assigned pod to:" + pod.getSpec().getNodeName()); + log.info ( "Tristan Build" ); alignment.task.submitted(); if( traceEnabled ) { From 73cb083e816203dab728b0d8185ed67a011e8c92 Mon Sep 17 00:00:00 2001 From: Tristan Date: Sat, 22 Jul 2023 14:17:06 +0200 Subject: [PATCH 02/13] Add CSV Reader --- .../cws/k8s/scheduler/csv_reader/ReadCsv.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java diff --git a/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java b/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java new file mode 100644 index 00000000..c0c476b8 --- /dev/null +++ b/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java @@ -0,0 +1,55 @@ +package cws.k8s.scheduler.csv_reader; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +import org.apache.commons.lang3.tuple.Pair; + +import lombok.Getter; + +public class ReadCsv { + + @Getter + private final String pathToCsv; + + @Getter + private final Map> labelNameToNodeResource = new HashMap<>(); + + public ReadCsv(String pathToCsv) { + this.pathToCsv = pathToCsv; + } + + public void readAndProcessCsv(String[] args) { + boolean isHeader = true; // Flag to check if there is a header + + try (BufferedReader br = new BufferedReader(new FileReader(pathToCsv))) { + String line; + while ((line = br.readLine()) != null) { + if (isHeader) { + isHeader = false; + continue; // Skip the header + } + String[] columns = line.split(";"); + if (columns.length == 3) { + String nodeName = columns[0]; + String labelName = columns[1]; + int resource = Integer.parseInt(columns[2]); + + + Pair nodeResourcePair = Pair.of(nodeName, resource); + labelNameToNodeResource.put(labelName, nodeResourcePair); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + for( Map.Entry> e : labelNameToNodeResource.entrySet()) { + System.out.println(e.getKey() + "/" + e.getValue().getLeft() + "/" + e.getValue().getRight()); + } + } +} \ No newline at end of file From a44461de3247e8b39ea4a181cdda41d30d792c1c Mon Sep 17 00:00:00 2001 From: Tristan Date: Sat, 22 Jul 2023 14:33:45 +0200 Subject: [PATCH 03/13] Csv Update --- src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java | 2 +- .../java/cws/k8s/scheduler/model/SchedulerConfig.java | 9 ++++----- .../cws/k8s/scheduler/rest/SchedulerRestController.java | 5 +++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java b/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java index c0c476b8..172fcf6c 100644 --- a/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java +++ b/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java @@ -23,7 +23,7 @@ public ReadCsv(String pathToCsv) { this.pathToCsv = pathToCsv; } - public void readAndProcessCsv(String[] args) { + public void readAndProcessCsv() { boolean isHeader = true; // Flag to check if there is a header try (BufferedReader br = new BufferedReader(new FileReader(pathToCsv))) { diff --git a/src/main/java/cws/k8s/scheduler/model/SchedulerConfig.java b/src/main/java/cws/k8s/scheduler/model/SchedulerConfig.java index 99539e68..f07b0438 100644 --- a/src/main/java/cws/k8s/scheduler/model/SchedulerConfig.java +++ b/src/main/java/cws/k8s/scheduler/model/SchedulerConfig.java @@ -1,10 +1,12 @@ package cws.k8s.scheduler.model; +import com.fasterxml.jackson.databind.JsonNode; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.ToString; import java.util.List; +import java.util.Map; @ToString @NoArgsConstructor(access = AccessLevel.PRIVATE,force = true) @@ -17,10 +19,7 @@ public class SchedulerConfig { public final String namespace; public final String costFunction; public final String strategy; - - public final Integer maxCopyTasksPerNode; - - public final Integer maxWaitingCopyTasksPerNode; + public final Map additional; @ToString @NoArgsConstructor(access = AccessLevel.PRIVATE,force = true) @@ -30,4 +29,4 @@ public static class VolumeClaim { public final String subPath; } -} +} \ No newline at end of file diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 05b1e8ea..4ca6149b 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -3,6 +3,7 @@ import cws.k8s.scheduler.dag.DAG; import cws.k8s.scheduler.dag.InputEdge; import cws.k8s.scheduler.client.KubernetesClient; +import cws.k8s.scheduler.csv_reader.ReadCsv; import cws.k8s.scheduler.dag.Vertex; import cws.k8s.scheduler.model.SchedulerConfig; import cws.k8s.scheduler.model.TaskConfig; @@ -99,6 +100,10 @@ ResponseEntity registerScheduler( Scheduler scheduler; + String pathToCsv = config.additional.get("myconfig").asText(); + ReadCsv readCsv = new ReadCsv(pathToCsv); + + readCsv.readAndProcessCsv(); if ( schedulerHolder.containsKey( execution ) ) { return noSchedulerFor( execution ); From 14c9e4fe123f9333fd049bf691b1634b5e0a2900 Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 24 Jul 2023 12:45:01 +0200 Subject: [PATCH 04/13] Tests --- .../cws/k8s/scheduler/csv_reader/ReadCsv.java | 55 -------------- .../rest/SchedulerRestController.java | 21 +++++- .../scheduler/scheduler/NodeLabelAssign.java | 73 +++++++++++++++++++ .../k8s/scheduler/scheduler/Scheduler.java | 2 +- 4 files changed, 91 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java create mode 100644 src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java diff --git a/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java b/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java deleted file mode 100644 index 172fcf6c..00000000 --- a/src/main/java/cws/k8s/scheduler/csv_reader/ReadCsv.java +++ /dev/null @@ -1,55 +0,0 @@ -package cws.k8s.scheduler.csv_reader; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - - -import org.apache.commons.lang3.tuple.Pair; - -import lombok.Getter; - -public class ReadCsv { - - @Getter - private final String pathToCsv; - - @Getter - private final Map> labelNameToNodeResource = new HashMap<>(); - - public ReadCsv(String pathToCsv) { - this.pathToCsv = pathToCsv; - } - - public void readAndProcessCsv() { - boolean isHeader = true; // Flag to check if there is a header - - try (BufferedReader br = new BufferedReader(new FileReader(pathToCsv))) { - String line; - while ((line = br.readLine()) != null) { - if (isHeader) { - isHeader = false; - continue; // Skip the header - } - String[] columns = line.split(";"); - if (columns.length == 3) { - String nodeName = columns[0]; - String labelName = columns[1]; - int resource = Integer.parseInt(columns[2]); - - - Pair nodeResourcePair = Pair.of(nodeName, resource); - labelNameToNodeResource.put(labelName, nodeResourcePair); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - - for( Map.Entry> e : labelNameToNodeResource.entrySet()) { - System.out.println(e.getKey() + "/" + e.getValue().getLeft() + "/" + e.getValue().getRight()); - } - } -} \ No newline at end of file diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 4ca6149b..292f63ad 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -3,10 +3,10 @@ import cws.k8s.scheduler.dag.DAG; import cws.k8s.scheduler.dag.InputEdge; import cws.k8s.scheduler.client.KubernetesClient; -import cws.k8s.scheduler.csv_reader.ReadCsv; import cws.k8s.scheduler.dag.Vertex; import cws.k8s.scheduler.model.SchedulerConfig; import cws.k8s.scheduler.model.TaskConfig; +import cws.k8s.scheduler.scheduler.NodeLabelAssign; import cws.k8s.scheduler.scheduler.PrioritizeAssignScheduler; import cws.k8s.scheduler.scheduler.Scheduler; import cws.k8s.scheduler.scheduler.prioritize.*; @@ -33,6 +33,8 @@ import java.util.List; import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; + @RestController @Slf4j @EnableScheduling @@ -100,10 +102,21 @@ ResponseEntity registerScheduler( Scheduler scheduler; - String pathToCsv = config.additional.get("myconfig").asText(); - ReadCsv readCsv = new ReadCsv(pathToCsv); + //// MY STUFFF FOR TESTING + Scheduler scheduler2; + + System.out.println("\n\nTristan\n"); + System.out.println(config.toString()); + System.out.println(config.additional.get("myconfig").get("taskA")); + System.out.println("\n\n"); + + ObjectMapper objectMapper = new ObjectMapper(); + Map nodelabel = objectMapper.convertValue(config.additional.get("myconfig"),Map.class); + + System.out.println(nodelabel.toString()); - readCsv.readAndProcessCsv(); + scheduler2 = new NodeLabelAssign( execution, client, namespace, config, nodelabel); + //// END MY STUFF if ( schedulerHolder.containsKey( execution ) ) { return noSchedulerFor( execution ); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java new file mode 100644 index 00000000..1ee172a2 --- /dev/null +++ b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java @@ -0,0 +1,73 @@ +package cws.k8s.scheduler.scheduler; + +import cws.k8s.scheduler.model.*; +import cws.k8s.scheduler.client.KubernetesClient; +import cws.k8s.scheduler.util.NodeTaskAlignment; +import lombok.extern.slf4j.Slf4j; + +import org.apache.commons.lang3.tuple.Pair; + +import java.util.*; + +@Slf4j +public class NodeLabelAssign extends Scheduler { + + public Map nodelabel; + + public NodeLabelAssign( String execution, + KubernetesClient client, + String namespace, + SchedulerConfig config, + final Map nodelabel + ) { + super(execution, client, namespace, config); + this.nodelabel = nodelabel; + } + + @Override + public ScheduleObject getTaskNodeAlignment( + final List unscheduledTasks, + final Map availableByNode + ){ + final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); + List alignment = new LinkedList<>(); + + long start = System.currentTimeMillis(); + if ( traceEnabled ) { + int index = 1; + for ( Task unscheduledTask : unscheduledTasks ) { + unscheduledTask.getTraceRecord().setSchedulerPlaceInQueue( index++ ); + } + } + + for ( Task unscheduledTask : unscheduledTasks ) { + + + final String taskLabel = unscheduledTask.getProcess().getLabel(); + System.out.println("Task Label: " + taskLabel); + + if(nodelabel.containsKey(taskLabel)){ + String nodeName = nodelabel.get(taskLabel); + System.out.println("Node Name: " + nodeName); + // int resource = nodeResourcePair.getRight(); // add resource cap + + for ( Map.Entry e : entries ) { + final NodeWithAlloc node = e.getKey(); + + if(nodeName == node.getName()){ + alignment.add( new NodeTaskAlignment( node, unscheduledTask ) ); + } + } + } + } + + long timeDelta = System.currentTimeMillis() - start; + for ( Task unscheduledTask : unscheduledTasks ) { + unscheduledTask.getTraceRecord().setSchedulerTimeToSchedule( (int) timeDelta ); + } + + final ScheduleObject scheduleObject = new ScheduleObject(alignment); + scheduleObject.setCheckStillPossible( false ); + return scheduleObject; + } +} \ No newline at end of file diff --git a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java index 27529730..57bc4122 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java @@ -152,7 +152,7 @@ public boolean validSchedulePlan( List taskNodeAlignment ){ return true; } - abstract ScheduleObject getTaskNodeAlignment( + public abstract ScheduleObject getTaskNodeAlignment( final List unscheduledTasks, final Map availableByNode ); From 930590073c7676e40971dbe2f5157d24a47ba3a3 Mon Sep 17 00:00:00 2001 From: Tristan Date: Sun, 30 Jul 2023 17:48:45 +0200 Subject: [PATCH 05/13] Update --- .../cws/k8s/scheduler/dag/VertexDeserializer.java | 5 +++++ .../java/cws/k8s/scheduler/model/TaskInput.java | 2 ++ .../scheduler/rest/SchedulerRestController.java | 1 + .../cws/k8s/scheduler/scheduler/Scheduler.java | 15 +++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java b/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java index 242e29a1..f65c365f 100644 --- a/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java +++ b/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java @@ -24,6 +24,11 @@ public Vertex deserialize(JsonParser jsonParser, DeserializationContext ctxt) th final String label = labelNode instanceof NullNode ? null : ((TextNode) labelNode).asText(); final int uid = ((IntNode) treeNode.get("uid")).asInt(); + System.out.println("\n\nLABELSTUFF"); + System.out.println(treeNode.toString()); + System.out.println("\n\n"); + + if ( Type.PROCESS == type ) { return new Process( label, uid ); } else if ( Type.OPERATOR == type ) { diff --git a/src/main/java/cws/k8s/scheduler/model/TaskInput.java b/src/main/java/cws/k8s/scheduler/model/TaskInput.java index d0b8b3ab..64d70927 100644 --- a/src/main/java/cws/k8s/scheduler/model/TaskInput.java +++ b/src/main/java/cws/k8s/scheduler/model/TaskInput.java @@ -1,6 +1,7 @@ package cws.k8s.scheduler.model; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; @@ -10,6 +11,7 @@ /** * Only for testing */ +@Getter @RequiredArgsConstructor( access = AccessLevel.PACKAGE ) public class TaskInput { diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 292f63ad..88cfbc1c 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -116,6 +116,7 @@ ResponseEntity registerScheduler( System.out.println(nodelabel.toString()); scheduler2 = new NodeLabelAssign( execution, client, namespace, config, nodelabel); + //// END MY STUFF if ( schedulerHolder.containsKey( execution ) ) { diff --git a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java index 57bc4122..5f6aaf34 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java @@ -469,6 +469,21 @@ Map getAvailableByNode(){ } logInfo.add("------------------------------------"); log.info(String.join("\n", logInfo)); + + + log.info("\n\nunscheduledTasks size: "); + System.out.println(unscheduledTasks.size() + "\n\n"); + System.out.println(unscheduledTasks.get(0).getProcess().getLabel()); + System.out.println(unscheduledTasks.toString()); + System.out.println(unscheduledTasks.get(0).toString()); + System.out.println(unscheduledTasks.get(0).getProcess().toString()); + System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().toString()); + System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).toString()); + System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).value); + + System.out.println("\n\n\n"); + + return availableByNode; } From e05cf3a85a78c38510b12e14688cb36ac244e6cc Mon Sep 17 00:00:00 2001 From: Tristan Date: Sun, 30 Jul 2023 18:18:56 +0200 Subject: [PATCH 06/13] Update --- .../cws/k8s/scheduler/rest/SchedulerRestController.java | 6 +++--- .../java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 88cfbc1c..16a4afd5 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -107,7 +107,7 @@ ResponseEntity registerScheduler( System.out.println("\n\nTristan\n"); System.out.println(config.toString()); - System.out.println(config.additional.get("myconfig").get("taskA")); + System.out.println(config.additional.get("myconfig").get("SRR838838")); System.out.println("\n\n"); ObjectMapper objectMapper = new ObjectMapper(); @@ -158,8 +158,8 @@ ResponseEntity registerScheduler( } } - schedulerHolder.put( execution, scheduler ); - client.addInformable( scheduler ); + schedulerHolder.put( execution, scheduler2 ); + client.addInformable( scheduler2 ); return new ResponseEntity<>( HttpStatus.OK ); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java index 1ee172a2..fe4d4580 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java @@ -5,8 +5,6 @@ import cws.k8s.scheduler.util.NodeTaskAlignment; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.tuple.Pair; - import java.util.*; @Slf4j @@ -42,8 +40,7 @@ public ScheduleObject getTaskNodeAlignment( for ( Task unscheduledTask : unscheduledTasks ) { - - final String taskLabel = unscheduledTask.getProcess().getLabel(); + final String taskLabel = unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).value; System.out.println("Task Label: " + taskLabel); if(nodelabel.containsKey(taskLabel)){ From 7415c5cbedb8a41dfc40ee3d9e423197df540d6c Mon Sep 17 00:00:00 2001 From: Tristan Date: Mon, 18 Sep 2023 14:56:34 +0200 Subject: [PATCH 07/13] Should work --- .../k8s/scheduler/dag/VertexDeserializer.java | 5 -- .../rest/SchedulerRestController.java | 38 +++++---- .../scheduler/scheduler/NodeLabelAssign.java | 83 ++++++++++++------- .../k8s/scheduler/scheduler/Scheduler.java | 15 ---- .../scheduler/nodeassign/LabelAssign.java | 75 +++++++++++++++++ 5 files changed, 153 insertions(+), 63 deletions(-) create mode 100644 src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java diff --git a/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java b/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java index f65c365f..242e29a1 100644 --- a/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java +++ b/src/main/java/cws/k8s/scheduler/dag/VertexDeserializer.java @@ -24,11 +24,6 @@ public Vertex deserialize(JsonParser jsonParser, DeserializationContext ctxt) th final String label = labelNode instanceof NullNode ? null : ((TextNode) labelNode).asText(); final int uid = ((IntNode) treeNode.get("uid")).asInt(); - System.out.println("\n\nLABELSTUFF"); - System.out.println(treeNode.toString()); - System.out.println("\n\n"); - - if ( Type.PROCESS == type ) { return new Process( label, uid ); } else if ( Type.OPERATOR == type ) { diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 16a4afd5..cc81fd09 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -11,6 +11,7 @@ import cws.k8s.scheduler.scheduler.Scheduler; import cws.k8s.scheduler.scheduler.prioritize.*; import cws.k8s.scheduler.scheduler.nodeassign.FairAssign; +import cws.k8s.scheduler.scheduler.nodeassign.LabelAssign; import cws.k8s.scheduler.scheduler.nodeassign.NodeAssign; import cws.k8s.scheduler.scheduler.nodeassign.RandomNodeAssign; import cws.k8s.scheduler.scheduler.nodeassign.RoundRobinAssign; @@ -103,31 +104,36 @@ ResponseEntity registerScheduler( Scheduler scheduler; //// MY STUFFF FOR TESTING - Scheduler scheduler2; + // Scheduler scheduler2; - System.out.println("\n\nTristan\n"); - System.out.println(config.toString()); - System.out.println(config.additional.get("myconfig").get("SRR838838")); - System.out.println("\n\n"); + // System.out.println("\n\nTristan\n"); + // System.out.println(config.toString()); + // System.out.println(config.additional.get("myconfig").get("SRR838838")); + // System.out.println("\n\n"); - ObjectMapper objectMapper = new ObjectMapper(); - Map nodelabel = objectMapper.convertValue(config.additional.get("myconfig"),Map.class); - - System.out.println(nodelabel.toString()); - - scheduler2 = new NodeLabelAssign( execution, client, namespace, config, nodelabel); + // System.out.println(nodelabel.toString()); //// END MY STUFF + ObjectMapper objectMapper = new ObjectMapper(); + Map nodelabel = objectMapper.convertValue(config.additional.get("myconfig"),Map.class); + if ( schedulerHolder.containsKey( execution ) ) { return noSchedulerFor( execution ); } switch ( strategy.toLowerCase() ){ - default: { - final String[] split = strategy.split( "-" ); + case "nodelabelassign": // Add your custom strategy Prioritize prioritize; + NodeAssign labelassign; NodeAssign assign; + prioritize = new RankMaxPrioritize(); + labelassign = new LabelAssign(nodelabel); + assign = new FairAssign(); + scheduler = new NodeLabelAssign(execution, client, namespace, config, prioritize, labelassign, assign); + break; + default: { + final String[] split = strategy.split( "-" ); if ( split.length <= 2 ) { switch ( split[0].toLowerCase() ) { case "fifo": prioritize = new FifoPrioritize(); break; @@ -158,8 +164,10 @@ ResponseEntity registerScheduler( } } - schedulerHolder.put( execution, scheduler2 ); - client.addInformable( scheduler2 ); + // System.out.print("\n\nScheduler"); + // scheduler.toString(); + schedulerHolder.put( execution, scheduler ); + client.addInformable( scheduler ); return new ResponseEntity<>( HttpStatus.OK ); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java index fe4d4580..0d397ae3 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java @@ -1,35 +1,54 @@ package cws.k8s.scheduler.scheduler; import cws.k8s.scheduler.model.*; +import cws.k8s.scheduler.scheduler.prioritize.Prioritize; +import cws.k8s.scheduler.client.Informable; import cws.k8s.scheduler.client.KubernetesClient; +import cws.k8s.scheduler.scheduler.nodeassign.NodeAssign; import cws.k8s.scheduler.util.NodeTaskAlignment; import lombok.extern.slf4j.Slf4j; import java.util.*; +import java.util.stream.Collector; +import java.util.stream.Collectors; @Slf4j public class NodeLabelAssign extends Scheduler { - public Map nodelabel; + private final Prioritize prioritize; + private final NodeAssign nodeAssigner; + private final NodeAssign nodeLabelAssigner; public NodeLabelAssign( String execution, - KubernetesClient client, - String namespace, - SchedulerConfig config, - final Map nodelabel - ) { + KubernetesClient client, + String namespace, + SchedulerConfig config, + Prioritize prioritize, + NodeAssign nodeLabelAssigner, + NodeAssign nodeAssigner ) { super(execution, client, namespace, config); - this.nodelabel = nodelabel; + this.prioritize = prioritize; + this.nodeLabelAssigner = nodeLabelAssigner; + this.nodeAssigner = nodeAssigner; + nodeAssigner.registerScheduler( this ); + if ( nodeAssigner instanceof Informable ){ + client.addInformable( (Informable) nodeAssigner ); + } + } + + @Override + public void close() { + super.close(); + if ( nodeAssigner instanceof Informable ){ + client.removeInformable( (Informable) nodeAssigner ); + } } @Override public ScheduleObject getTaskNodeAlignment( final List unscheduledTasks, final Map availableByNode - ){ - final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); - List alignment = new LinkedList<>(); - + ){ long start = System.currentTimeMillis(); if ( traceEnabled ) { int index = 1; @@ -37,33 +56,41 @@ public ScheduleObject getTaskNodeAlignment( unscheduledTask.getTraceRecord().setSchedulerPlaceInQueue( index++ ); } } + prioritize.sortTasks( unscheduledTasks ); + + // print Tasks + System.out.println("Tasks before Label Alignment"); + unscheduledTasks.stream().map(obj -> obj.getConfig().getName()).forEach(System.out::println); - for ( Task unscheduledTask : unscheduledTasks ) { + // first alignemnt + List alignmentLabelAssign = nodeLabelAssigner.getTaskNodeAlignment(unscheduledTasks, availableByNode); + List namesList = alignmentLabelAssign.stream().map(obj -> obj.task.getConfig().getName()).collect(Collectors.toList()); + System.out.println(namesList.toString()); + + + List filteredTasks = new LinkedList<>(); - final String taskLabel = unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).value; - System.out.println("Task Label: " + taskLabel); - - if(nodelabel.containsKey(taskLabel)){ - String nodeName = nodelabel.get(taskLabel); - System.out.println("Node Name: " + nodeName); - // int resource = nodeResourcePair.getRight(); // add resource cap - - for ( Map.Entry e : entries ) { - final NodeWithAlloc node = e.getKey(); - - if(nodeName == node.getName()){ - alignment.add( new NodeTaskAlignment( node, unscheduledTask ) ); - } - } + for (final Task task : unscheduledTasks) { + if (!namesList.contains(task.getConfig().getName())) { + filteredTasks.add(task); } } + // print Tasks + System.out.println("Tasks after Label Alignment"); + filteredTasks.stream().map(obj -> obj.getConfig().getName()).forEach(System.out::println); + + // second alignemnt + List alignment = nodeAssigner.getTaskNodeAlignment(filteredTasks, availableByNode); + + + alignmentLabelAssign.addAll(alignment); long timeDelta = System.currentTimeMillis() - start; for ( Task unscheduledTask : unscheduledTasks ) { unscheduledTask.getTraceRecord().setSchedulerTimeToSchedule( (int) timeDelta ); } - final ScheduleObject scheduleObject = new ScheduleObject(alignment); + final ScheduleObject scheduleObject = new ScheduleObject(alignmentLabelAssign); scheduleObject.setCheckStillPossible( false ); return scheduleObject; } diff --git a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java index 5f6aaf34..660cf087 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/Scheduler.java @@ -385,7 +385,6 @@ boolean assignTaskToNode( NodeTaskAlignment alignment ){ pod.getSpec().setNodeName( alignment.node.getMetadata().getName() ); log.info ( "Assigned pod to:" + pod.getSpec().getNodeName()); - log.info ( "Tristan Build" ); alignment.task.submitted(); if( traceEnabled ) { @@ -470,20 +469,6 @@ Map getAvailableByNode(){ logInfo.add("------------------------------------"); log.info(String.join("\n", logInfo)); - - log.info("\n\nunscheduledTasks size: "); - System.out.println(unscheduledTasks.size() + "\n\n"); - System.out.println(unscheduledTasks.get(0).getProcess().getLabel()); - System.out.println(unscheduledTasks.toString()); - System.out.println(unscheduledTasks.get(0).toString()); - System.out.println(unscheduledTasks.get(0).getProcess().toString()); - System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().toString()); - System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).toString()); - System.out.println(unscheduledTasks.get(0).getConfig().getInputs().getStringInputs().get(0).value); - - System.out.println("\n\n\n"); - - return availableByNode; } diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java new file mode 100644 index 00000000..31767586 --- /dev/null +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -0,0 +1,75 @@ +package cws.k8s.scheduler.scheduler.nodeassign; + +import cws.k8s.scheduler.model.NodeWithAlloc; +import cws.k8s.scheduler.model.PodWithAge; +import cws.k8s.scheduler.model.Requirements; +import cws.k8s.scheduler.model.Task; +import cws.k8s.scheduler.util.NodeTaskAlignment; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; + +@Slf4j +public class LabelAssign extends NodeAssign { + + public Map nodelabel; + + public LabelAssign( + final Map nodelabel + ){ + this.nodelabel = nodelabel; + } + + @Override + public List getTaskNodeAlignment( List unscheduledTasks, Map availableByNode ) { + LinkedList alignment = new LinkedList<>(); + final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); + for ( final Task task : unscheduledTasks ) { + + String taskName = null; + String taskLabel = null; + + // try this else do another assign approach + try { + // taskLabel = task.getConfig().getInputs().getStringInputs().get(0).value; + taskName = task.getConfig().getName(); + taskLabel = taskName.split("~")[1]; + + log.info("Label for task: " + task.getConfig().getName() + " == " + taskLabel); + } catch ( Exception e ){ + log.warn( "Cannot find a label for task: " + task.getConfig().getName(), e ); + continue; + } + + // System.out.println("Task Label: " + taskLabel); + + final PodWithAge pod = task.getPod(); + log.info("Pod: " + pod.getName() + " Requested Resources: " + pod.getRequest() ); + + if(nodelabel.containsKey(taskLabel)){ + String nodeName = nodelabel.get(taskLabel); + // System.out.println("\n\nTask Node Name: " + nodeName); + + for ( Map.Entry e : entries ) { + final NodeWithAlloc node = e.getKey(); + + // System.out.println("Node Name: " + node.getName()); + // System.out.println("Equals? " + nodeName + " == " + node.getName() + " " + (nodeName.equals(node.getName()))); + if(nodeName.equals(node.getName())){ + System.out.println("Aligned Pod to node: " + node.getName()); + alignment.add( new NodeTaskAlignment( node, task ) ); + availableByNode.get( node ).subFromThis(pod.getRequest()); + log.info("--> " + node.getName()); + task.getTraceRecord().foundAlignment(); + break; + } + } + } else + { + log.info( "Task Label: " + taskLabel + " doesn't exist in config file. Please edit your config file."); + } + } + return alignment; + } +} + From 0878b6e215c732de1e624ec621a90f385102708e Mon Sep 17 00:00:00 2001 From: Tristan Date: Wed, 4 Oct 2023 12:18:10 +0200 Subject: [PATCH 08/13] Update Last few things --- .../scheduler/rest/SchedulerRestController.java | 16 +--------------- .../scheduler/nodeassign/LabelAssign.java | 15 +++++---------- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index cc81fd09..0eb1e4a4 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -103,18 +103,6 @@ ResponseEntity registerScheduler( Scheduler scheduler; - //// MY STUFFF FOR TESTING - // Scheduler scheduler2; - - // System.out.println("\n\nTristan\n"); - // System.out.println(config.toString()); - // System.out.println(config.additional.get("myconfig").get("SRR838838")); - // System.out.println("\n\n"); - - // System.out.println(nodelabel.toString()); - - //// END MY STUFF - ObjectMapper objectMapper = new ObjectMapper(); Map nodelabel = objectMapper.convertValue(config.additional.get("myconfig"),Map.class); @@ -123,7 +111,7 @@ ResponseEntity registerScheduler( } switch ( strategy.toLowerCase() ){ - case "nodelabelassign": // Add your custom strategy + case "nodelabelassign": Prioritize prioritize; NodeAssign labelassign; NodeAssign assign; @@ -164,8 +152,6 @@ ResponseEntity registerScheduler( } } - // System.out.print("\n\nScheduler"); - // scheduler.toString(); schedulerHolder.put( execution, scheduler ); client.addInformable( scheduler ); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index 31767586..d96b66cc 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -29,32 +29,27 @@ public List getTaskNodeAlignment( List unscheduledTasks String taskName = null; String taskLabel = null; - // try this else do another assign approach try { - // taskLabel = task.getConfig().getInputs().getStringInputs().get(0).value; taskName = task.getConfig().getName(); - taskLabel = taskName.split("~")[1]; + taskLabel = taskName.split("~")[1]; + // ~ is used for a special case in which subtasks from one process in nextflow are generated + // the labels in the nextflow config have to be named like this: ~label~ - log.info("Label for task: " + task.getConfig().getName() + " == " + taskLabel); + log.info("Label for task: " + task.getConfig().getName() + " : " + taskLabel); } catch ( Exception e ){ log.warn( "Cannot find a label for task: " + task.getConfig().getName(), e ); continue; } - // System.out.println("Task Label: " + taskLabel); - final PodWithAge pod = task.getPod(); log.info("Pod: " + pod.getName() + " Requested Resources: " + pod.getRequest() ); if(nodelabel.containsKey(taskLabel)){ String nodeName = nodelabel.get(taskLabel); - // System.out.println("\n\nTask Node Name: " + nodeName); for ( Map.Entry e : entries ) { final NodeWithAlloc node = e.getKey(); - // System.out.println("Node Name: " + node.getName()); - // System.out.println("Equals? " + nodeName + " == " + node.getName() + " " + (nodeName.equals(node.getName()))); if(nodeName.equals(node.getName())){ System.out.println("Aligned Pod to node: " + node.getName()); alignment.add( new NodeTaskAlignment( node, task ) ); @@ -66,7 +61,7 @@ public List getTaskNodeAlignment( List unscheduledTasks } } else { - log.info( "Task Label: " + taskLabel + " doesn't exist in config file. Please edit your config file."); + log.info( "Task Label: " + taskLabel + " doesn't exist in config file."); } } return alignment; From b220902e9e1b63281d78d9aa86ae0eb551131451 Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 7 Nov 2023 11:28:48 +0100 Subject: [PATCH 09/13] Some changes - still testing --- .../cws/k8s/scheduler/model/TaskInput.java | 2 +- .../rest/SchedulerRestController.java | 16 +++++------ .../scheduler/scheduler/NodeLabelAssign.java | 27 ++++++++++--------- .../scheduler/nodeassign/LabelAssign.java | 25 ++++++++++------- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/model/TaskInput.java b/src/main/java/cws/k8s/scheduler/model/TaskInput.java index 64d70927..b483b0be 100644 --- a/src/main/java/cws/k8s/scheduler/model/TaskInput.java +++ b/src/main/java/cws/k8s/scheduler/model/TaskInput.java @@ -8,10 +8,10 @@ import java.util.List; @NoArgsConstructor( access = AccessLevel.PRIVATE, force = true ) +@Getter /** * Only for testing */ -@Getter @RequiredArgsConstructor( access = AccessLevel.PACKAGE ) public class TaskInput { diff --git a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java index 0eb1e4a4..319935f6 100644 --- a/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java +++ b/src/main/java/cws/k8s/scheduler/rest/SchedulerRestController.java @@ -103,22 +103,20 @@ ResponseEntity registerScheduler( Scheduler scheduler; - ObjectMapper objectMapper = new ObjectMapper(); - Map nodelabel = objectMapper.convertValue(config.additional.get("myconfig"),Map.class); + // ObjectMapper objetMapper = new ObjectMapper(); + // Map nodelabel = objectMapper.convertValue(config.additional.get("tasklabelconfig"),Map.class); if ( schedulerHolder.containsKey( execution ) ) { return noSchedulerFor( execution ); } + + Prioritize prioritize; + NodeAssign assign; + switch ( strategy.toLowerCase() ){ case "nodelabelassign": - Prioritize prioritize; - NodeAssign labelassign; - NodeAssign assign; - prioritize = new RankMaxPrioritize(); - labelassign = new LabelAssign(nodelabel); - assign = new FairAssign(); - scheduler = new NodeLabelAssign(execution, client, namespace, config, prioritize, labelassign, assign); + scheduler = new NodeLabelAssign(execution, client, namespace, config); break; default: { final String[] split = strategy.split( "-" ); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java index 0d397ae3..cd5b7572 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java @@ -2,9 +2,12 @@ import cws.k8s.scheduler.model.*; import cws.k8s.scheduler.scheduler.prioritize.Prioritize; +import cws.k8s.scheduler.scheduler.prioritize.RankMaxPrioritize; import cws.k8s.scheduler.client.Informable; import cws.k8s.scheduler.client.KubernetesClient; +import cws.k8s.scheduler.scheduler.nodeassign.LabelAssign; import cws.k8s.scheduler.scheduler.nodeassign.NodeAssign; +import cws.k8s.scheduler.scheduler.nodeassign.FairAssign; import cws.k8s.scheduler.util.NodeTaskAlignment; import lombok.extern.slf4j.Slf4j; @@ -19,6 +22,10 @@ public class NodeLabelAssign extends Scheduler { private final NodeAssign nodeAssigner; private final NodeAssign nodeLabelAssigner; + public NodeLabelAssign(String execution, KubernetesClient client, String namespace, SchedulerConfig config) { + this(execution, client, namespace, config, new RankMaxPrioritize(), new LabelAssign(config), new FairAssign()); + } + public NodeLabelAssign( String execution, KubernetesClient client, String namespace, @@ -27,9 +34,9 @@ public NodeLabelAssign( String execution, NodeAssign nodeLabelAssigner, NodeAssign nodeAssigner ) { super(execution, client, namespace, config); - this.prioritize = prioritize; - this.nodeLabelAssigner = nodeLabelAssigner; - this.nodeAssigner = nodeAssigner; + this.prioritize = (prioritize != null) ? prioritize : new RankMaxPrioritize(); + this.nodeLabelAssigner = (nodeLabelAssigner != null) ? nodeLabelAssigner : new LabelAssign(config); + this.nodeAssigner = (nodeAssigner != null) ? nodeAssigner : new FairAssign(); nodeAssigner.registerScheduler( this ); if ( nodeAssigner instanceof Informable ){ client.addInformable( (Informable) nodeAssigner ); @@ -58,15 +65,13 @@ public ScheduleObject getTaskNodeAlignment( } prioritize.sortTasks( unscheduledTasks ); - // print Tasks - System.out.println("Tasks before Label Alignment"); + unscheduledTasks.stream().map(obj -> obj.getConfig().getName()).forEach(System.out::println); - // first alignemnt + // first alignemnt (LabelAssign) List alignmentLabelAssign = nodeLabelAssigner.getTaskNodeAlignment(unscheduledTasks, availableByNode); List namesList = alignmentLabelAssign.stream().map(obj -> obj.task.getConfig().getName()).collect(Collectors.toList()); - System.out.println(namesList.toString()); - + // System.out.println(namesList.toString()); List filteredTasks = new LinkedList<>(); @@ -76,11 +81,7 @@ public ScheduleObject getTaskNodeAlignment( } } - // print Tasks - System.out.println("Tasks after Label Alignment"); - filteredTasks.stream().map(obj -> obj.getConfig().getName()).forEach(System.out::println); - - // second alignemnt + // second alignemnt (FairAssign) List alignment = nodeAssigner.getTaskNodeAlignment(filteredTasks, availableByNode); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index d96b66cc..bdbc8be3 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -4,26 +4,34 @@ import cws.k8s.scheduler.model.PodWithAge; import cws.k8s.scheduler.model.Requirements; import cws.k8s.scheduler.model.Task; +import cws.k8s.scheduler.model.SchedulerConfig; import cws.k8s.scheduler.util.NodeTaskAlignment; import lombok.extern.slf4j.Slf4j; +import com.fasterxml.jackson.databind.ObjectMapper; + import java.util.*; @Slf4j public class LabelAssign extends NodeAssign { - public Map nodelabel; + final SchedulerConfig config; public LabelAssign( - final Map nodelabel + final SchedulerConfig config ){ - this.nodelabel = nodelabel; + this.config = config; } @Override public List getTaskNodeAlignment( List unscheduledTasks, Map availableByNode ) { + + // get the node-label map + ObjectMapper objectMapper = new ObjectMapper(); + Map nodelabel = objectMapper.convertValue(config.additional.get("tasklabelconfig"),Map.class); + LinkedList alignment = new LinkedList<>(); - final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); + // final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); for ( final Task task : unscheduledTasks ) { String taskName = null; @@ -42,12 +50,12 @@ public List getTaskNodeAlignment( List unscheduledTasks } final PodWithAge pod = task.getPod(); - log.info("Pod: " + pod.getName() + " Requested Resources: " + pod.getRequest() ); + // log.info("Pod: " + pod.getName() + " Requested Resources: " + pod.getRequest() ); if(nodelabel.containsKey(taskLabel)){ String nodeName = nodelabel.get(taskLabel); - for ( Map.Entry e : entries ) { + for ( Map.Entry e : availableByNode.entrySet() ) { final NodeWithAlloc node = e.getKey(); if(nodeName.equals(node.getName())){ @@ -59,9 +67,8 @@ public List getTaskNodeAlignment( List unscheduledTasks break; } } - } else - { - log.info( "Task Label: " + taskLabel + " doesn't exist in config file."); + } else { + log.warn( "Task Label: " + taskLabel + " does not exist in config file."); } } return alignment; From 6c26c637dbbe79149802e436f7b49b922a8cc72f Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 7 Nov 2023 11:42:02 +0100 Subject: [PATCH 10/13] switch to log.info --- src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java | 1 - .../cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java index cd5b7572..d0732992 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/NodeLabelAssign.java @@ -71,7 +71,6 @@ public ScheduleObject getTaskNodeAlignment( // first alignemnt (LabelAssign) List alignmentLabelAssign = nodeLabelAssigner.getTaskNodeAlignment(unscheduledTasks, availableByNode); List namesList = alignmentLabelAssign.stream().map(obj -> obj.task.getConfig().getName()).collect(Collectors.toList()); - // System.out.println(namesList.toString()); List filteredTasks = new LinkedList<>(); diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index bdbc8be3..9ed68e80 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -59,7 +59,7 @@ public List getTaskNodeAlignment( List unscheduledTasks final NodeWithAlloc node = e.getKey(); if(nodeName.equals(node.getName())){ - System.out.println("Aligned Pod to node: " + node.getName()); + log.info("Aligned Pod to node: " + node.getName()); alignment.add( new NodeTaskAlignment( node, task ) ); availableByNode.get( node ).subFromThis(pod.getRequest()); log.info("--> " + node.getName()); From fec8602ffc68e51f74aa74a125ec24525ff555bd Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 7 Nov 2023 12:34:43 +0100 Subject: [PATCH 11/13] Error Message --- .../cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index 9ed68e80..528b8d86 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -30,6 +30,10 @@ public List getTaskNodeAlignment( List unscheduledTasks ObjectMapper objectMapper = new ObjectMapper(); Map nodelabel = objectMapper.convertValue(config.additional.get("tasklabelconfig"),Map.class); + if ( nodelabel == null ){ + log.error("No tasklabelconfig exist in the nextflow.config file. Define a tasklabelconfig or use another scheduling strategy."); + } + LinkedList alignment = new LinkedList<>(); // final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); for ( final Task task : unscheduledTasks ) { From fcd1e6eec0cc425083ac28d8d2a162c39c0e3cb3 Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 7 Nov 2023 12:53:48 +0100 Subject: [PATCH 12/13] Break for add --- .../k8s/scheduler/scheduler/nodeassign/LabelAssign.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index 528b8d86..a1921886 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -30,13 +30,14 @@ public List getTaskNodeAlignment( List unscheduledTasks ObjectMapper objectMapper = new ObjectMapper(); Map nodelabel = objectMapper.convertValue(config.additional.get("tasklabelconfig"),Map.class); - if ( nodelabel == null ){ - log.error("No tasklabelconfig exist in the nextflow.config file. Define a tasklabelconfig or use another scheduling strategy."); - } - LinkedList alignment = new LinkedList<>(); // final ArrayList> entries = new ArrayList<>( availableByNode.entrySet() ); for ( final Task task : unscheduledTasks ) { + + if ( nodelabel == null ){ + log.error("No tasklabelconfig exist in the nextflow.config file. Define a tasklabelconfig or use another scheduling strategy."); + break; + } String taskName = null; String taskLabel = null; From ed55fd454f9a5d849abe350686dbf27590f29862 Mon Sep 17 00:00:00 2001 From: Tristan Date: Tue, 7 Nov 2023 12:54:22 +0100 Subject: [PATCH 13/13] changed to warn --- .../cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java index a1921886..30759838 100644 --- a/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java +++ b/src/main/java/cws/k8s/scheduler/scheduler/nodeassign/LabelAssign.java @@ -35,7 +35,7 @@ public List getTaskNodeAlignment( List unscheduledTasks for ( final Task task : unscheduledTasks ) { if ( nodelabel == null ){ - log.error("No tasklabelconfig exist in the nextflow.config file. Define a tasklabelconfig or use another scheduling strategy."); + log.warn("No tasklabelconfig exist in the nextflow.config file. Define a tasklabelconfig or use another scheduling strategy."); break; }