diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
index aa56889..763aeb4 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -116,12 +116,12 @@
 
   @Override
   public Boolean canPerformGC() {
-    return gitRepositoryManager.canPerformGC();
+    return repositoryManager().canPerformGC();
   }
 
   @Override
   public Status getRepositoryStatus(NameKey name) {
-    return gitRepositoryManager.getRepositoryStatus(name);
+    return repositoryManager().getRepositoryStatus(name);
   }
 
   private Repository wrap(Project.NameKey projectName, Repository projectRepo) {
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
index a6c7667..d31aac0 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
@@ -14,17 +14,20 @@
 
 package com.gerritforge.gerrit.globalrefdb.validation;
 
+import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
 import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
 import com.google.common.collect.ImmutableSet;
+import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.TypeLiteral;
 import com.google.inject.name.Names;
+import java.util.Collections;
 import org.eclipse.jgit.lib.Repository;
 import org.junit.Before;
 import org.junit.Test;
@@ -110,6 +113,33 @@
     verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(IGNORED_REFS);
   }
 
+  @Test
+  public void canPerformGCShouldDelegateToLocalDiskRepositoryManager() {
+    doReturn(true).when(localDiskRepositoryManagerMock).canPerformGC();
+
+    assertThat(msRepoMgr.canPerformGC()).isTrue();
+    verify(localDiskRepositoryManagerMock).canPerformGC();
+  }
+
+  @Test
+  public void getRepositoryStatusShouldDelegateToLocalDiskRepositoryManager() {
+    doReturn(GitRepositoryManager.Status.ACTIVE)
+        .when(localDiskRepositoryManagerMock)
+        .getRepositoryStatus(A_TEST_PROJECT_NAME_KEY);
+
+    assertThat(msRepoMgr.getRepositoryStatus(A_TEST_PROJECT_NAME_KEY))
+        .isEqualTo(GitRepositoryManager.Status.ACTIVE);
+    verify(localDiskRepositoryManagerMock).getRepositoryStatus(A_TEST_PROJECT_NAME_KEY);
+  }
+
+  @Test
+  public void listShouldDelegateToLocalDiskRepositoryManager() {
+    doReturn(Collections.emptySortedSet()).when(localDiskRepositoryManagerMock).list();
+
+    assertThat(msRepoMgr.list()).isEqualTo(Collections.emptySortedSet());
+    verify(localDiskRepositoryManagerMock).list();
+  }
+
   private Injector getInjector(ImmutableSet<String> ignoredRefs) {
     return Guice.createInjector(
         new AbstractModule() {
