Add option to run non aggressive gc to gc-conductor Before this fix gc-executor had hardcoded setAgressive(true) for each gc invocation. Running gc without aggressive mode allowed gc to reuse delta and reduce gc time. Change-Id: I7c80372d5aa14db3d9385df10fd43f7b50fc8e74
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/CommonConfig.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/CommonConfig.java index 4081ed0..3c591c4 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/CommonConfig.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/CommonConfig.java
@@ -27,6 +27,7 @@ public static final String DB_PASS_KEY = "password"; public static final String PACKED_KEY = "packed"; public static final String LOOSE_KEY = "loose"; + public static final String GC_FORCE_AGGRESSIVE_KEY = "forceAggressive"; public static final String DEFAULT_DB_URL = "jdbc:postgresql://localhost:5432/"; public static final String DEFAULT_DB_NAME = "gc"; @@ -34,6 +35,7 @@ public static final String DEFAULT_DB_PASSWORD = DEFAULT_DB_NAME; public static final int PACKED_DEFAULT = 40; public static final int LOOSE_DEFAULT = 400; + public static final boolean DEFAULT_GC_FORCE_AGGRESSIVE = false; private final String databaseUrl; private final String databaseName; @@ -42,6 +44,7 @@ private final String password; private final int packed; private final int loose; + private final boolean aggressive; /** * Create CommonConfig from the specified parameters. @@ -53,6 +56,7 @@ * @param password The password of the database server user. * @param loose The number of loose objects to consider a repo dirty * @param packed The number of packs to consider a repo dirty + * @param aggressive default gc mode aggressive or not. */ public CommonConfig( String databaseUrl, @@ -61,7 +65,8 @@ String username, String password, int packed, - int loose) { + int loose, + boolean aggressive) { this.databaseUrl = databaseUrl.replaceFirst("/?$", "/"); this.databaseName = databaseName; this.databaseUrlOptions = databaseUrlOptions; @@ -69,6 +74,7 @@ this.password = password; this.packed = packed; this.loose = loose; + this.aggressive = aggressive; } /** @return the database server URL. */ @@ -106,6 +112,11 @@ return loose; } + /** @return if gc mode is set to aggressive, by default its not aggressive */ + public boolean isAggressive() { + return aggressive; + } + protected static String getString( Config config, String section, String subsection, String key, String defaultValue) { String value = config.getString(section, subsection, key);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java index 43803e4..8ca6897 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java
@@ -25,10 +25,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.eclipse.jgit.api.Git; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.internal.storage.file.FileRepository; import org.eclipse.jgit.internal.storage.file.GC; import org.eclipse.jgit.internal.storage.file.GC.RepoStatistics; +import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; @@ -232,7 +234,14 @@ private void insertRepository() { try { - queue.add(repositoryPath, hostname); + boolean isAggressive = cfg.isAggressive(); + if (!isAggressive) // Force is aggressive option is not set then read repo config + { + // isAggressive based on current repo config + isAggressive = getGcModeFromRepository(repositoryPath); + } + queue.add(repositoryPath, hostname, isAggressive); + } catch (GcQueueException e) { log.error("Error adding repository in queue {}", repositoryPath, e); } @@ -242,4 +251,17 @@ public String toString() { return "Evaluate if repository need GC: " + repositoryPath; } + + public static boolean getGcModeFromRepository(String repositoryPath) { + try { + Git git = Git.open(new File(repositoryPath)); + return git.getRepository() + .getConfig() + .getBoolean(ConfigConstants.CONFIG_GC_SECTION, "aggressive", false); + } catch (IOException e) { + log.error( + "Error reading repository config returns default non-aggressive{}", repositoryPath, e); + } + return false; + } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/GcQueue.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/GcQueue.java index cc2560e..a1ae883 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/GcQueue.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/GcQueue.java
@@ -33,9 +33,10 @@ * * @param repository The path to the repository. * @param queuedFrom The hostname from which the repository is queued from. + * @param isAggressive sets gc mode to aggressive or non-aggressive. * @throws GcQueueException if an error occur while adding the repository. */ - void add(String repository, String queuedFrom) throws GcQueueException; + void add(String repository, String queuedFrom, boolean isAggressive) throws GcQueueException; /** * Pick a repository from the queue.
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfo.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfo.java index a7eedec..3079c11 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfo.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfo.java
@@ -23,12 +23,15 @@ private final Timestamp queuedAt; private final String executor; private final String queuedFrom; + private final boolean aggressive; - public RepositoryInfo(String path, Timestamp queuedAt, String executor, String queuedFrom) { + public RepositoryInfo( + String path, Timestamp queuedAt, String executor, String queuedFrom, boolean aggressive) { this.path = path; this.queuedAt = queuedAt; this.executor = executor; this.queuedFrom = queuedFrom; + this.aggressive = aggressive; } /** @return the path to the repository. */ @@ -50,4 +53,8 @@ public String getQueuedFrom() { return queuedFrom; } + + public boolean isAggressive() { + return aggressive; + } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/AddToQueue.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/AddToQueue.java index 25939a2..eadf28c 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/AddToQueue.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/AddToQueue.java
@@ -51,6 +51,9 @@ @Option(name = "--first", usage = "add repository as first priority in GC queue") private boolean first; + @Option(name = "--aggressive", usage = "add repository as aggressive GC") + private boolean aggressive; + @Inject private GcQueue queue; @Inject @Hostname private String hostName; @@ -70,7 +73,7 @@ repositoryPath = resolvePath(); } repository = repositoryPath.toString(); - queue.add(repository, hostName); + queue.add(repository, hostName, aggressive); if (first) { queue.bumpToFirst(repository); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorConfig.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorConfig.java index acb3600..34b6d62 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorConfig.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorConfig.java
@@ -43,7 +43,8 @@ cfg.getString(DB_USERNAME_KEY, DEFAULT_DB_USERNAME), cfg.getString(DB_PASS_KEY, DEFAULT_DB_PASSWORD), cfg.getInt(PACKED_KEY, PACKED_DEFAULT), - cfg.getInt(LOOSE_KEY, LOOSE_DEFAULT)); + cfg.getInt(LOOSE_KEY, LOOSE_DEFAULT), + cfg.getBoolean(GC_FORCE_AGGRESSIVE_KEY, DEFAULT_GC_FORCE_AGGRESSIVE)); threadPoolSize = cfg.getInt(THREAD_POOL_KEY, THREAD_POOL_DEFAULT); String expireTimeRecheckString =
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/ExecutorConfig.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/ExecutorConfig.java index f339302..84ce8ce 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/ExecutorConfig.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/ExecutorConfig.java
@@ -73,7 +73,9 @@ getString(config, DB_SECTION, null, DB_USERNAME_KEY, DEFAULT_DB_USERNAME), getString(config, DB_SECTION, null, DB_PASS_KEY, DEFAULT_DB_PASSWORD), config.getInt(EVALUATION_SECTION, PACKED_KEY, PACKED_DEFAULT), - config.getInt(EVALUATION_SECTION, LOOSE_KEY, LOOSE_DEFAULT)); + config.getInt(EVALUATION_SECTION, LOOSE_KEY, LOOSE_DEFAULT), + config.getBoolean( + EVALUATION_SECTION, GC_FORCE_AGGRESSIVE_KEY, DEFAULT_GC_FORCE_AGGRESSIVE)); delay = config.getInt(CORE_SECTION, DELAY_KEY, DEFAULT_DELAY); executors = config.getInt(CORE_SECTION, EXECUTOR_KEY, DEFAULT_EXECUTORS); pickOwnHostOnly = config.getBoolean(CORE_SECTION, PICK_OWN_HOST_KEY, true);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GarbageCollector.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GarbageCollector.java index bc825d0..e905a35 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GarbageCollector.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GarbageCollector.java
@@ -24,6 +24,7 @@ class GarbageCollector implements Callable<Boolean> { private String repositoryPath; private ProgressMonitor pm; + private boolean aggressive; void setRepositoryPath(String repositoryPath) { this.repositoryPath = repositoryPath; @@ -33,11 +34,15 @@ this.pm = pm; } + void setAggressive(boolean aggressive) { + this.aggressive = aggressive; + } + @Override public Boolean call() throws Exception { try (Git git = Git.open(new File(repositoryPath))) { git.gc() - .setAggressive(true) + .setAggressive(aggressive) .setPreserveOldPacks(true) .setPrunePreserved(true) .setProgressMonitor(pm)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorker.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorker.java index 14ea8fc..2d68097 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorker.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorker.java
@@ -69,9 +69,9 @@ @Override public void run() { while (!cpm.isCancelled()) { - String repoPath = pickRepository(); - if (repoPath != null) { - runGc(repoPath); + RepositoryInfo repoInfo = pickRepository(); + if (null != repoInfo && null != repoInfo.getPath()) { + runGc(repoInfo.getPath(), repoInfo.isAggressive()); } else { log.debug("No repository picked, going to sleep"); try { @@ -85,11 +85,11 @@ } } - private String pickRepository() { + private RepositoryInfo pickRepository() { try { RepositoryInfo repoInfo = queue.pick(name, queuedForLongerThan, queuedFrom); if (repoInfo != null) { - return repoInfo.getPath(); + return repoInfo; } } catch (GcQueueException e) { log.error("Unable to pick repository from the queue", e); @@ -97,11 +97,12 @@ return null; } - private void runGc(String repoPath) { + private void runGc(String repoPath, boolean aggressive) { try { - log.info("Starting gc on repository {}", repoPath); + log.info("Starting {} gc on repository {}", aggressive ? "aggressive" : "normal", repoPath); gc.setRepositoryPath(repoPath); gc.setPm(cpm); + gc.setAggressive(aggressive); retryer.call(gc); log.info("Gc completed on repository {}", repoPath); } catch (Throwable e) {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/DatabaseConstants.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/DatabaseConstants.java index 0b66cf3..cdd7dd9 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/DatabaseConstants.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/DatabaseConstants.java
@@ -33,6 +33,7 @@ private static final String SEQUENCE = "sequence"; static final String QUEUED_AT = "queued_at"; static final String HOSTNAME = "hostname"; + static final String AGGRESSIVE = "aggressive"; static final String CREATE_OR_UPDATE_SCHEMA = "DO" @@ -50,7 +51,10 @@ + EXECUTOR + " VARCHAR(258), " + HOSTNAME - + " VARCHAR(255) NOT NULL);" + + " VARCHAR(255) NOT NULL, " + + AGGRESSIVE + + " BOOLEAN NOT NULL" + + ");" // This section is temporary to support migrating live, next version will // drop the executor tables, only drop the foreign key for now. + " IF EXISTS (" @@ -64,6 +68,17 @@ + REPOSITORIES_TABLE + " DROP CONSTRAINT repositories_executor_fkey;" + " END IF;" + + " BEGIN ALTER TABLE " + + REPOSITORIES_TABLE + + " ADD COLUMN " + + AGGRESSIVE + + " BOOLEAN NOT NULL DEFAULT (true);" + + " EXCEPTION WHEN duplicate_column THEN RAISE NOTICE 'column " + + AGGRESSIVE + + " already exists in " + + REPOSITORIES_TABLE + + ".';" + + " END;" + " END " + " $$"; @@ -89,10 +104,17 @@ return SELECT_REPOSITORIES + " WHERE " + REPOSITORY + "='" + repository + "'"; } - static final String insert(String repository, String hostname) { + static final String insert(String repository, String hostname, boolean isAggressive) { return format( - "INSERT INTO %s (%s,%s) SELECT '%s','%s' WHERE NOT EXISTS (%s)", - REPOSITORIES_TABLE, REPOSITORY, HOSTNAME, repository, hostname, select(repository)); + "INSERT INTO %s (%s,%s,%s) SELECT '%s','%s','%b' WHERE NOT EXISTS (%s)", + REPOSITORIES_TABLE, + REPOSITORY, + HOSTNAME, + AGGRESSIVE, + repository, + hostname, + isAggressive, + select(repository)); } static final String delete(String repository) {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueue.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueue.java index d2dca5a..2cddb3e 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueue.java +++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueue.java
@@ -14,6 +14,7 @@ package com.ericsson.gerrit.plugins.gcconductor.postgresqueue; +import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.AGGRESSIVE; import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.CREATE_OR_UPDATE_SCHEMA; import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.EXECUTOR; import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.HOSTNAME; @@ -55,9 +56,10 @@ } @Override - public void add(String repository, String queuedFrom) throws GcQueueException { + public void add(String repository, String queuedFrom, boolean isAggressive) + throws GcQueueException { try { - executeStatement(dataSource, insert(repository, queuedFrom)); + executeStatement(dataSource, insert(repository, queuedFrom, isAggressive)); } catch (SQLException e) { if (!"23505".equals(e.getSQLState())) { // UNIQUE CONSTRAINT violation means repository is already in the queue @@ -152,10 +154,12 @@ int queuedAtColumn = resultSet.findColumn(QUEUED_AT); int executorColumn = resultSet.findColumn(EXECUTOR); int hostnameColumn = resultSet.findColumn(HOSTNAME); + int aggressiveColumn = resultSet.findColumn(AGGRESSIVE); return new RepositoryInfo( resultSet.getString(repositoryColumn), resultSet.getTimestamp(queuedAtColumn), resultSet.getString(executorColumn), - resultSet.getString(hostnameColumn)); + resultSet.getString(hostnameColumn), + resultSet.getBoolean(aggressiveColumn)); } }
diff --git a/src/main/resources/Documentation/cmd-add-to-queue.md b/src/main/resources/Documentation/cmd-add-to-queue.md index 326174f..a9df7b6 100644 --- a/src/main/resources/Documentation/cmd-add-to-queue.md +++ b/src/main/resources/Documentation/cmd-add-to-queue.md
@@ -33,6 +33,9 @@ `--first` : Add repository as first priority in GC queue. +`--aggressive` +: Add repository for aggressive GC (default gc mode is non-aggressive). + EXAMPLES -------- Absolute path to a repository:
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTaskTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTaskTest.java index 8106a71..2ccdd0d 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTaskTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTaskTest.java
@@ -67,7 +67,7 @@ when(queue.contains(repositoryPath)).thenReturn(false); task = new EvaluationTask(cfg, queue, SOME_HOSTNAME, repositoryPath); task.run(); - verify(queue).add(repositoryPath, SOME_HOSTNAME); + verify(queue).add(repositoryPath, SOME_HOSTNAME, false); } @Test @@ -78,14 +78,14 @@ gc(repository); task = new EvaluationTask(cfg, queue, SOME_HOSTNAME, repositoryPath); task.run(); - verify(queue).add(repositoryPath, SOME_HOSTNAME); + verify(queue).add(repositoryPath, SOME_HOSTNAME, false); } @Test public void repositoryShouldNotBeAddedIfAlreadyInQueue() throws Exception { when(queue.contains(repositoryPath)).thenReturn(true); task.run(); - verify(queue, never()).add(repositoryPath, SOME_HOSTNAME); + verify(queue, never()).add(repositoryPath, SOME_HOSTNAME, false); } @Test @@ -94,7 +94,7 @@ when(cfg.getPackedThreshold()).thenReturn(1); when(queue.contains(repositoryPath)).thenReturn(false); task.run(); - verify(queue, never()).add(repositoryPath, SOME_HOSTNAME); + verify(queue, never()).add(repositoryPath, SOME_HOSTNAME, false); } @Test @@ -103,7 +103,7 @@ .when(queue) .contains(repositoryPath); task.run(); - verify(queue, never()).add(repositoryPath, SOME_HOSTNAME); + verify(queue, never()).add(repositoryPath, SOME_HOSTNAME, false); } @Test @@ -111,7 +111,7 @@ when(queue.contains(repositoryPath)).thenReturn(false); doThrow(new GcQueueException("some message", new Throwable())) .when(queue) - .add(repositoryPath, SOME_HOSTNAME); + .add(repositoryPath, SOME_HOSTNAME, false); task.run(); } @@ -120,7 +120,7 @@ when(queue.contains(repositoryPath)).thenReturn(false); dir.delete(); task.run(); - verify(queue, never()).add(repositoryPath, SOME_HOSTNAME); + verify(queue, never()).add(repositoryPath, SOME_HOSTNAME, true); } @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfoTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfoTest.java index ba78afc..355ffb4 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfoTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/RepositoryInfoTest.java
@@ -24,28 +24,28 @@ @Test public void shouldReturnPath() { String path = "/path/someRepo.git"; - RepositoryInfo repoInfo = new RepositoryInfo(path, null, null, null); + RepositoryInfo repoInfo = new RepositoryInfo(path, null, null, null, true); assertThat(repoInfo.getPath()).isEqualTo(path); } @Test public void shouldReturnQueuedAt() { Timestamp time = new Timestamp(System.currentTimeMillis()); - RepositoryInfo repoInfo = new RepositoryInfo(null, time, null, null); + RepositoryInfo repoInfo = new RepositoryInfo(null, time, null, null, true); assertThat(repoInfo.getQueuedAt()).isEqualTo(time); } @Test public void shouldReturnExecutor() { String executor = "someHost-1"; - RepositoryInfo repoInfo = new RepositoryInfo(null, null, executor, null); + RepositoryInfo repoInfo = new RepositoryInfo(null, null, executor, null, true); assertThat(repoInfo.getExecutor()).isEqualTo(executor); } @Test public void shouldReturnQueuedFrom() { String hostname = "someHost-2"; - RepositoryInfo repoInfo = new RepositoryInfo(null, null, null, hostname); + RepositoryInfo repoInfo = new RepositoryInfo(null, null, null, hostname, true); assertThat(repoInfo.getQueuedFrom()).isEqualTo(hostname); } }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcExecutorTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcExecutorTest.java index 4c74510..b3cad54 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcExecutorTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcExecutorTest.java
@@ -70,7 +70,8 @@ when(config.getExecutors()).thenReturn(1); when(gcWorkerFactory.create(EXECUTOR)).thenReturn(gcWorker); when(gcQueue.list()) - .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, EXECUTOR, HOSTNAME))); + .thenReturn( + ImmutableList.of(new RepositoryInfo(REPOSITORY, null, EXECUTOR, HOSTNAME, true))); GcExecutor gcExecutor = new GcExecutor(gcQueue, config, gcWorkerFactory, scheduledEvaluator, HOSTNAME); verify(gcQueue).unpick(REPOSITORY); @@ -84,7 +85,7 @@ when(config.getExecutors()).thenReturn(1); when(gcWorkerFactory.create(EXECUTOR)).thenReturn(gcWorker); when(gcQueue.list()) - .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME))); + .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME, true))); GcExecutor gcExecutor = new GcExecutor(gcQueue, config, gcWorkerFactory, scheduledEvaluator, HOSTNAME); verify(gcQueue, never()).unpick(REPOSITORY); @@ -100,7 +101,8 @@ when(gcQueue.list()) .thenReturn( ImmutableList.of( - new RepositoryInfo(REPOSITORY, null, "another executor", "another hostname"))); + new RepositoryInfo( + REPOSITORY, null, "another executor", "another hostname", true))); GcExecutor gcExecutor = new GcExecutor(gcQueue, config, gcWorkerFactory, scheduledEvaluator, HOSTNAME); verify(gcQueue, never()).unpick(REPOSITORY); @@ -129,7 +131,7 @@ when(config.getInterval()).thenReturn(1L); when(gcWorkerFactory.create(EXECUTOR)).thenReturn(gcWorker); when(gcQueue.list()) - .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME))); + .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME, true))); GcExecutor gcExecutor = new GcExecutor(gcQueue, config, gcWorkerFactory, scheduledEvaluator, HOSTNAME); verify(gcWorker).start(); @@ -144,7 +146,7 @@ when(config.getInitialDelay()).thenReturn(1L); when(gcWorkerFactory.create(EXECUTOR)).thenReturn(gcWorker); when(gcQueue.list()) - .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME))); + .thenReturn(ImmutableList.of(new RepositoryInfo(REPOSITORY, null, null, HOSTNAME, true))); GcExecutor gcExecutor = new GcExecutor(gcQueue, config, gcWorkerFactory, scheduledEvaluator, HOSTNAME); verify(gcWorker).start();
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorkerTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorkerTest.java index c9b8e5d..1073869 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorkerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/executor/GcWorkerTest.java
@@ -50,7 +50,7 @@ @Before public void setUp() { Thread.interrupted(); // reset the flag - repoInfo = new RepositoryInfo(REPO_PATH, null, EXEC_NAME, HOSTNAME); + repoInfo = new RepositoryInfo(REPO_PATH, null, EXEC_NAME, HOSTNAME, true); gcTask = new GcWorker(queue, garbageCollector, cpm, QUEUED_FROM, 0, EXEC_NAME); }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java index aab695c..5c947a1 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java
@@ -85,18 +85,18 @@ assertThat(queue.list()).isEmpty(); assertThat(queue.contains(repoPath)).isFalse(); - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); assertThat(queue.list().size()).isEqualTo(1); assertThat(queue.contains(repoPath)).isTrue(); - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); assertThat(queue.list().size()).isEqualTo(1); assertThat(queue.contains(repoPath)).isTrue(); String repoPath2 = "/some/path/to/some/repository2"; String hostname2 = "someHostname2"; - queue.add(repoPath2, hostname2); + queue.add(repoPath2, hostname2, true); assertThat(queue.list().size()).isEqualTo(2); assertThat(queue.contains(repoPath)).isTrue(); assertThat(queue.contains(repoPath2)).isTrue(); @@ -118,19 +118,19 @@ @Test public void testAddThatFailsWhenGettingConnection() throws Exception { queue = new PostgresQueue(createDataSourceThatFailsWhenGettingConnection()); - assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname")); + assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname", true)); } @Test public void testAddThatFailsWhenCreatingStatement() throws Exception { queue = new PostgresQueue(createDataSourceThatFailsWhenCreatingStatement()); - assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname")); + assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname", true)); } @Test public void testAddThatFailsWhenExecutingQuery() throws Exception { queue = new PostgresQueue(createDataSourceThatFailsWhenExecutingQuery()); - assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname")); + assertThrows(GcQueueException.class, () -> queue.add("repo", "hostname", true)); } @Test @@ -184,8 +184,8 @@ assertThat(queue.list()).isEmpty(); Timestamp before = new Timestamp(System.currentTimeMillis()); - queue.add(repoPath, hostname); - queue.add(repoPath2, hostname); + queue.add(repoPath, hostname, true); + queue.add(repoPath2, hostname, true); queue.pick(executor, 0, Optional.empty()); assertThat(queue.list().size()).isEqualTo(2); @@ -244,7 +244,7 @@ assertThat(queue.pick(executor, 0, Optional.empty())).isNull(); // queue contains 1 repository, should pick that one - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); RepositoryInfo picked = queue.pick(executor, 0, Optional.empty()); assertThat(picked).isNotNull(); assertThat(picked.getPath()).isEqualTo(repoPath); @@ -265,7 +265,7 @@ public void testPickRepositoriesInOrder() throws Exception { String repositoryFormat = "my/path%s.git"; for (int i = 0; i < 100; i++) { - queue.add(String.format(repositoryFormat, i), "someHostname"); + queue.add(String.format(repositoryFormat, i), "someHostname", true); } for (int i = 0; i < 100; i++) { String pickedRepo = queue.pick("someExecutor", 0, Optional.empty()).getPath(); @@ -281,7 +281,7 @@ String executor = "someExecutor"; // pick repository older than 10 seconds, nothing to pick - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); assertThat(queue.pick(executor, 10, Optional.empty())).isNull(); assertThat(queue.list().get(0).getExecutor()).isNull(); @@ -300,7 +300,7 @@ String executor = "hostname-1"; // pick repository queued from otherHostname, nothing to pick - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); assertThat(queue.pick(executor, 0, Optional.of(otherHostname))).isNull(); assertThat(queue.list().get(0).getExecutor()).isNull(); @@ -341,7 +341,7 @@ String executor = "someExecutor"; // queue contains 1 repository, should pick that one - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); RepositoryInfo picked = queue.pick(executor, 0, Optional.empty()); assertThat(picked.getPath()).isEqualTo(repoPath); assertThat(picked.getExecutor()).isEqualTo(executor); @@ -379,8 +379,8 @@ String hostname = "hostname"; String otherHostname = "otherHostname"; - queue.add(repoPath, hostname); - queue.add(repoPath2, hostname); + queue.add(repoPath, hostname, true); + queue.add(repoPath2, hostname, true); assertThat(queue.list().get(0).getQueuedFrom()).isEqualTo(hostname); assertThat(queue.list().get(1).getQueuedFrom()).isEqualTo(hostname); @@ -415,14 +415,14 @@ String hostname = "hostname"; // Queue contains 1 repository, bumping should have no effect - queue.add(repoPath, hostname); + queue.add(repoPath, hostname, true); assertThat(queue.list().get(0).getPath()).isEqualTo(repoPath); queue.bumpToFirst(repoPath); assertThat(queue.list().get(0).getPath()).isEqualTo(repoPath); // Queue has 3 repositories, should be able to change their order - queue.add(repoPath2, hostname); - queue.add(repoPath3, hostname); + queue.add(repoPath2, hostname, true); + queue.add(repoPath3, hostname, true); assertThat(queue.list().get(1).getPath()).isEqualTo(repoPath2); assertThat(queue.list().get(2).getPath()).isEqualTo(repoPath3);