Keep queued tasks to persist in a Set and not a List
No point in persisting duplicates.
Change-Id: Iadc559df3ebfd0a92f562709f95634879bae160e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
index 720cec1..4a378c7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
@@ -18,7 +18,7 @@
import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCC;
import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.entities.Project;
import com.google.gerrit.entities.Project.NameKey;
@@ -29,8 +29,8 @@
import com.google.gerrit.server.util.time.TimeUtil;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
-import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
@@ -106,7 +106,7 @@
}
public void shutDown() {
- List<ParsingQueueTask> tasks = Lists.newArrayListWithCapacity(pending.size());
+ Set<ParsingQueueTask> tasks = Sets.newHashSet();
for (Map.Entry<EventParsingWorker, ScheduledFuture<?>> e : pending.entrySet()) {
e.getValue().cancel(true);
tasks.add(e.getKey().task);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistence.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistence.java
index b62206b..2852d4d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistence.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistence.java
@@ -26,7 +26,9 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.List;
+import java.util.Set;
public class ParsingQueuePersistence {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@@ -42,7 +44,7 @@
this.persistenceFile = pluginDataDir.resolve(PERSISTED_FILE_NAME);
}
- public void persist(List<ParsingQueueTask> tasks) {
+ public void persist(Set<ParsingQueueTask> tasks) {
try {
if (Files.isRegularFile(persistenceFile)) {
Files.delete(persistenceFile);
@@ -59,14 +61,14 @@
}
}
- public List<ParsingQueueTask> getPersistedTasks() {
- List<ParsingQueueTask> persistedTasks = null;
+ public Collection<ParsingQueueTask> getPersistedTasks() {
+ Set<ParsingQueueTask> persistedTasks = null;
try {
if (Files.isRegularFile(persistenceFile)) {
persistedTasks =
GSON.fromJson(
Files.newBufferedReader(persistenceFile, UTF_8),
- new TypeToken<List<ParsingQueueTask>>() {
+ new TypeToken<Set<ParsingQueueTask>>() {
private static final long serialVersionUID = 1L;
}.getType());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueueIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueueIT.java
index ec9e0c5..dc39eff 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueueIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueueIT.java
@@ -22,7 +22,7 @@
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.ArtifactEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType;
-import java.util.List;
+import java.util.Set;
import org.eclipse.jgit.lib.Constants;
import org.junit.Before;
import org.junit.Test;
@@ -47,7 +47,7 @@
@Test
public void persistedScsFromBranchIsScheduledAndPushed() throws Exception {
queuePersistence.persist(
- List.of(ParsingQueueTask.builder(EiffelEventType.SCS, project.get(), getHead()).build()));
+ Set.of(ParsingQueueTask.builder(EiffelEventType.SCS, project.get(), getHead()).build()));
parsingQueue.init();
assertCorrectEvent(0, eventForHead(EiffelEventType.SCC));
assertCorrectEvent(1, eventForHead(EiffelEventType.SCS));
@@ -59,7 +59,7 @@
PushOneCommit.Result res = createChange();
merge(res);
queuePersistence.persist(
- List.of(
+ Set.of(
ParsingQueueTask.builder(EiffelEventType.SCS, project.get(), "refs/heads/master")
.commit(res.getCommit().name())
.build()));
@@ -73,7 +73,7 @@
setScsHandled();
PushOneCommit.Result res = createChange();
queuePersistence.persist(
- List.of(
+ Set.of(
ParsingQueueTask.builder(EiffelEventType.SCC, project.get(), "refs/heads/master")
.commit(res.getCommit().name())
.build()));
@@ -87,7 +87,7 @@
PushOneCommit.Result res = createChange();
merge(res);
queuePersistence.persist(
- List.of(
+ Set.of(
ParsingQueueTask.builder(EiffelEventType.SCS, project.get(), "refs/heads/master")
.build()));
parsingQueue.init();
@@ -103,7 +103,7 @@
CompositionDefinedEventKey cd =
CompositionDefinedEventKey.create(tagCompositionName(project.get(), "localhost"), tag);
queuePersistence.persist(
- List.of(
+ Set.of(
ParsingQueueTask.builder(EiffelEventType.ARTC, project.get(), tag)
.updateTime(EPOCH_MILLIS)
.force(false)
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
index 7fa9bb5..c0f1457 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
@@ -14,7 +14,6 @@
package com.googlesource.gerrit.plugins.eventseiffel.parsing;
import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.assertEquals;
import autovaluegson.factory.shaded.com.google.common.collect.Lists;
import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
@@ -29,6 +28,7 @@
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.Delayed;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ScheduledFuture;
@@ -57,28 +57,25 @@
@Test
public void tasksArePersisted() throws Exception {
- List<ParsingQueueTask> original = createTasks(1, 5);
+ Set<ParsingQueueTask> original = createTasks(1, 5);
queuePersistence.persist(original);
- List<ParsingQueueTask> deserialized = queuePersistence.getPersistedTasks();
- assertEquals(original, deserialized);
+ assertThat(queuePersistence.getPersistedTasks()).containsExactlyElementsIn(original);
}
@Test
public void multiplePersistenceRuns() throws Exception {
- List<ParsingQueueTask> original = createTasks(1, 6);
+ Set<ParsingQueueTask> original = createTasks(1, 6);
queuePersistence.persist(original);
- List<ParsingQueueTask> deserialized = queuePersistence.getPersistedTasks();
- assertEquals(original, deserialized);
+ assertThat(queuePersistence.getPersistedTasks()).containsExactlyElementsIn(original);
original = createTasks(6, 10);
queuePersistence.persist(original);
- deserialized = queuePersistence.getPersistedTasks();
- assertEquals(original, deserialized);
+ assertThat(queuePersistence.getPersistedTasks()).containsExactlyElementsIn(original);
}
@Test
public void persistedTasksAreScheduledOnInit() throws Exception {
- List<ParsingQueueTask> tasks = createTasks(1, 6);
+ Set<ParsingQueueTask> tasks = createTasks(1, 6);
queuePersistence.persist(tasks);
parsingQueue.init();
assertThat(
@@ -89,10 +86,10 @@
tasks.stream().map(t -> Project.nameKey(t.repoName)).collect(Collectors.toList()));
}
- private List<ParsingQueueTask> createTasks(int start, int end) {
+ private Set<ParsingQueueTask> createTasks(int start, int end) {
return IntStream.range(start, end)
.mapToObj(ParsingQueuePersistenceIT::createTask)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
}
public static ParsingQueueTask createTask(int id) {