diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
index 241e733..1e45951 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
@@ -150,7 +150,7 @@
               .collect(Collectors.joining(", "));
       Exception firstFailureException = refsFailures.get(0).exception;
 
-      logger.atSevere().withCause(firstFailureException).log(allFailuresMessage);
+      logger.atSevere().withCause(firstFailureException).log("%s", allFailuresMessage);
       throw new IOException(allFailuresMessage, firstFailureException);
     }
 
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
index 0168f2f..85e803a 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
@@ -160,7 +160,7 @@
   private Boolean isRefToBeIgnored(String refName) {
     Boolean isRefToBeIgnored =
         ignoredRefs.stream().anyMatch(ignoredRefPrefix -> refName.startsWith(ignoredRefPrefix));
-    logger.atFine().log("Is ref to be ignored? " + isRefToBeIgnored);
+    logger.atFine().log("Is project version update? %s", isRefToBeIgnored);
     return isRefToBeIgnored;
   }
 
@@ -176,7 +176,7 @@
 
   protected Boolean isGlobalProject(String projectName) {
     Boolean isGlobalProject = projectsFilter.matches(projectName);
-    logger.atFine().log("Is global project? " + isGlobalProject);
+    logger.atFine().log("Is global project? %s", isGlobalProject);
     return isGlobalProject;
   }
 
@@ -231,10 +231,8 @@
               Project.nameKey(projectName), refPair.compareRef, refPair.putValue);
     } catch (GlobalRefDbSystemError e) {
       logger.atWarning().withCause(e).log(
-          "Not able to persist the data in global-refdb for project '{}' and ref '{}', message: {}",
-          projectName,
-          refPair.getName(),
-          e.getMessage());
+          "Not able to persist the data in global-refdb for project '%s' and ref '%s', message: %s",
+          projectName, refPair.getName(), e.getMessage());
       throw e;
     }
 
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 0e21338..763aeb4 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -17,6 +17,7 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.entities.Project;
+import com.google.gerrit.entities.Project.NameKey;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import com.google.gerrit.server.git.RepositoryCaseMismatchException;
@@ -113,6 +114,16 @@
     return repositoryManager().list();
   }
 
+  @Override
+  public Boolean canPerformGC() {
+    return repositoryManager().canPerformGC();
+  }
+
+  @Override
+  public Status getRepositoryStatus(NameKey name) {
+    return repositoryManager().getRepositoryStatus(name);
+  }
+
   private Repository wrap(Project.NameKey projectName, Repository projectRepo) {
     return sharedRefDbRepoFactory.create(projectName.get(), projectRepo, ignoredRefs);
   }
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() {
