Skip to content

Commit ae4223b

Browse files
lipidohlfernandez
authored andcommitted
Improves speed in dependencies checking
This commit improves the performance when checking if a task has at of its dependencies met.
1 parent a2f6c47 commit ae4223b

File tree

6 files changed

+28
-15
lines changed

6 files changed

+28
-15
lines changed

cli/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>org.sing_group</groupId>
1111
<artifactId>compi</artifactId>
12-
<version>1.3.5</version>
12+
<version>1.3.6</version>
1313
<!--
1414
WARNING: change version using (in the parent project):
1515
mvn versions:set -DnewVersion=[new_version]

core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>org.sing_group</groupId>
1212
<artifactId>compi</artifactId>
13-
<version>1.3.5</version>
13+
<version>1.3.6</version>
1414
<!--
1515
WARNING: change version using (in the parent project):
1616
mvn versions:set -DnewVersion=[new_version]

core/src/main/java/org/sing_group/compi/core/TasksDAG.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,24 @@
3030
import java.util.concurrent.ConcurrentHashMap;
3131
import java.util.stream.Collectors;
3232

33-
import org.sing_group.compi.core.loops.ForeachIteration;
3433
import org.sing_group.compi.core.loops.ForeachIterationDependency;
3534
import org.sing_group.compi.core.pipeline.Foreach;
3635
import org.sing_group.compi.core.pipeline.Task;
3736

3837
public class TasksDAG {
3938

40-
private final Map<Task, Set<Dependency<?>>> dag = new ConcurrentHashMap<>();
39+
private final Map<Task, Set<Dependency<?>>> dag = new ConcurrentHashMap<>(); // task
40+
// ->
41+
// dependants
42+
private final Map<Task, Set<Dependency<?>>> reverseDag = new ConcurrentHashMap<>(); // task
43+
// ->
44+
// dependencies
4145

4246
private Map<Task, Set<Dependency<?>>> dependantsCache = new HashMap<>();
4347
private Map<Task, Set<Dependency<?>>> dependenciesCache = new HashMap<>();
4448

4549
public Set<Dependency<?>> getDependantsOfTask(Task t) {
50+
4651
if (dependantsCache.containsKey(t))
4752
return dependantsCache.get(t);
4853

@@ -55,8 +60,7 @@ public Set<Dependency<?>> getDependantsOfTask(Task t) {
5560
dependantsOfTask.add(dependency);
5661
Set<Dependency<?>> dependants = getDependantsOfTask(dependency.getDependantTask());
5762
dependantsOfTask.addAll(
58-
dependants.stream().map(d -> new Dependency<Task>(t, d.getDependantTask())
59-
).collect(Collectors.toSet())
63+
dependants.stream().map(d -> new Dependency<Task>(t, d.getDependantTask())).collect(Collectors.toSet())
6064
);
6165
}
6266

@@ -73,6 +77,7 @@ public Set<Dependency<?>> getDependantsOfTask(Task t) {
7377
* @return Tasks that task depends on
7478
*/
7579
public Set<Dependency<?>> getDependenciesOfTask(Task task) {
80+
7681
if (dependenciesCache.containsKey(task))
7782
return dependenciesCache.get(task);
7883

@@ -112,14 +117,16 @@ public void initializeTaskDependencies(Collection<Task> tasks) {
112117
}
113118

114119
public boolean dependenciesAreMet(final Task task) {
115-
return this.getDependenciesOfTask(task).stream()
116-
.map(Dependency::getOnTask).filter(t -> !t.isFinished())
117-
.collect(Collectors.toList())
120+
if (!reverseDag.containsKey(task)) {
121+
return true;
122+
}
123+
return this.reverseDag.get(task).stream().filter(d -> !d.getOnTask().isFinished()).collect(Collectors.toList())
118124
.size() == 0;
119125
}
120126

121127
public void removeDependency(Task t, Task dependant) {
122128
this.dag.get(t).removeIf(d -> d.getDependantTask().equals(dependant));
129+
this.reverseDag.get(dependant).removeIf(d -> d.getOnTask().equals(t));
123130
clearCache();
124131
}
125132

@@ -130,9 +137,15 @@ public void addDependency(Task task, Task dependant, boolean isIterationDependen
130137
if (!this.dag.containsKey(task)) {
131138
this.dag.put(task, new HashSet<>());
132139
}
133-
this.dag.get(task).add(
134-
isIterationDependency ? new ForeachIterationDependency((Foreach) task, (Foreach) dependant) : new Dependency<Task>(task, dependant)
135-
);
140+
if (!this.reverseDag.containsKey(dependant)) {
141+
this.reverseDag.put(dependant, new HashSet<>());
142+
}
143+
144+
Dependency<?> dependency =
145+
isIterationDependency ? new ForeachIterationDependency((Foreach) task, (Foreach) dependant) : new Dependency<Task>(task, dependant);
146+
this.dag.get(task).add(dependency);
147+
this.reverseDag.get(dependant).add(dependency);
148+
136149
clearCache();
137150
}
138151

dk/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>org.sing_group</groupId>
1111
<artifactId>compi</artifactId>
12-
<version>1.3.5</version>
12+
<version>1.3.6</version>
1313
<!--
1414
WARNING: change version using (in the parent project):
1515
mvn versions:set -DnewVersion=[new_version]

e2e-tests/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>org.sing_group</groupId>
1111
<artifactId>compi</artifactId>
12-
<version>1.3.5</version>
12+
<version>1.3.6</version>
1313
<!--
1414
WARNING: change version using (in the parent project):
1515
mvn versions:set -DnewVersion=[new_version]

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<groupId>org.sing_group</groupId>
77
<artifactId>compi</artifactId>
88
<packaging>pom</packaging>
9-
<version>1.3.5</version>
9+
<version>1.3.6</version>
1010
<!-- WARNING: change version using (in the parent project): mvn versions:set -DnewVersion=[new_version] mvn versions:commit This will change the version
1111
in all modules at-once -->
1212

0 commit comments

Comments
 (0)