Use getByRemoteName in fetch command Leverage getByRemoteName() method in fetch command when looking for a specific remote, rather than inefficiently scanning the entire list of sources. This improves access time from an O(n) scan to an O(1) lookup. Change-Id: I282e1da1bb94adfb20a4f566130cdf1a4b424c57
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java index e1ac9ac..8b3c437 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommand.java
@@ -72,8 +72,7 @@ ReplicationState state = fetchReplicationStateFactory.create( new FetchResultProcessing.CommandProcessing(this, eventDispatcher.get())); - Optional<Source> source = - sources.getAll().stream().filter(s -> s.getRemoteConfigName().equals(label)).findFirst(); + Optional<Source> source = sources.getByRemoteName(label); if (!source.isPresent()) { String msg = String.format("Remote configuration section %s not found", label); fetchStateLog.error(msg, state);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommandTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommandTest.java index e1ad565..e8d1a0f 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommandTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/FetchCommandTest.java
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.common.collect.Lists; import com.google.gerrit.entities.Project; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.server.events.EventDispatcher; @@ -35,6 +34,7 @@ import com.googlesource.gerrit.plugins.replication.pull.SourcesCollection; import com.googlesource.gerrit.plugins.replication.pull.api.exception.RemoteConfigurationMissingException; import java.net.URISyntaxException; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -74,8 +74,7 @@ label = "instance-1-label"; when(fetchReplicationStateFactory.create(any())).thenReturn(state); - when(source.getRemoteConfigName()).thenReturn(label); - when(sources.getAll()).thenReturn(Lists.newArrayList(source)); + when(sources.getByRemoteName(label)).thenReturn(Optional.of(source)); when(source.schedule(eq(projectName), eq(REF_NAME_TO_FETCH), eq(state), any())) .thenReturn(CompletableFuture.completedFuture(null)); objectUnderTest =