Merge branch 'stable-3.10' into stable-3.11 * stable-3.10: De-register deleted repositories from the JGit RepositoryCache Change-Id: I5e4e300e22a6f11b7d7fa4178f6eb586d954738b
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandler.java index 857d2db..3dee851 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandler.java
@@ -16,10 +16,13 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.entities.Project; +import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.ProjectCache; import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.RepositoryCache; /** * Update project list cache. This class is meant to be used on the receiving side of the {@link @@ -31,10 +34,12 @@ private static final FluentLogger log = FluentLogger.forEnclosingClass(); private final ProjectCache projectCache; + private final GitRepositoryManager repoMgr; @Inject - ForwardedProjectListUpdateHandler(ProjectCache projectCache) { + ForwardedProjectListUpdateHandler(ProjectCache projectCache, GitRepositoryManager repoMgr) { this.projectCache = projectCache; + this.repoMgr = repoMgr; } /** @@ -50,6 +55,7 @@ Context.setForwardedEvent(true); if (remove) { projectCache.remove(projectKey); + removeFromRepositoryCache(projectKey); log.atFine().log("Removed %s from project list", projectName); } else { projectCache.onCreateProject(projectKey); @@ -59,4 +65,14 @@ Context.unsetForwardedEvent(); } } + + private void removeFromRepositoryCache(Project.NameKey projectKey) { + try (Repository repo = repoMgr.openRepository(projectKey)) { + if (repo != null) { + RepositoryCache.unregister(repo); + } + } catch (IOException e) { + // The repository does not exist: nothing to do + } + } }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandlerTest.java index 2067265..b4b6e26 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandlerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedProjectListUpdateHandlerTest.java
@@ -20,6 +20,7 @@ import static org.mockito.Mockito.verify; import com.google.gerrit.entities.Project; +import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.ProjectCache; import org.junit.Before; import org.junit.Test; @@ -35,11 +36,12 @@ private static final String SOME_MESSAGE = "someMessage"; private static final Project.NameKey PROJECT_KEY = Project.nameKey(PROJECT_NAME); @Mock private ProjectCache projectCacheMock; + @Mock private GitRepositoryManager repoMgrMock; private ForwardedProjectListUpdateHandler handler; @Before public void setUp() throws Exception { - handler = new ForwardedProjectListUpdateHandler(projectCacheMock); + handler = new ForwardedProjectListUpdateHandler(projectCacheMock, repoMgrMock); } @Test