Use project name in calls to cache Project name is unique in a Gerrit instance therefore it can be used as a ref qualifier instead of identity. It is way shorter therefore it will result in a small memory optimization. Change-Id: I80a464822e9399af01efbc48373c6579cdcb4578
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java index 360dfa1..a3ebb47 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/BatchRefUpdateWithCacheUpdate.java
@@ -22,7 +22,6 @@ import org.eclipse.jgit.lib.BatchRefUpdate; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.ProgressMonitor; -import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.PushCertificate; import org.eclipse.jgit.transport.ReceiveCommand; @@ -30,17 +29,17 @@ class BatchRefUpdateWithCacheUpdate extends BatchRefUpdate { interface Factory { - BatchRefUpdateWithCacheUpdate create(Repository repo, BatchRefUpdate delegate); + BatchRefUpdateWithCacheUpdate create(CachedRefRepository repo, BatchRefUpdate delegate); } - private final Repository repo; + private final CachedRefRepository repo; private final RefByNameCacheWrapper refsCache; private final BatchRefUpdate delegate; @Inject BatchRefUpdateWithCacheUpdate( RefByNameCacheWrapper refsCache, - @Assisted Repository repo, + @Assisted CachedRefRepository repo, @Assisted BatchRefUpdate delegate) { super(repo.getRefDatabase()); this.refsCache = refsCache; @@ -177,7 +176,7 @@ .forEach( cmd -> { if (cmd.getResult() == ReceiveCommand.Result.OK) { - refsCache.evict(repo.getIdentifier(), cmd.getRefName()); + refsCache.evict(repo.getProjectName(), cmd.getRefName()); } }); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java index 79a619c..fdbca56 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefDatabase.java
@@ -88,7 +88,7 @@ @Override public Ref exactRef(String name) throws IOException { return refsCache.computeIfAbsent( - repo.getIdentifier(), name, () -> Optional.ofNullable(delegate.exactRef(name))); + repo.getProjectName(), name, () -> Optional.ofNullable(delegate.exactRef(name))); } @Deprecated
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java index e7960e3..86cf9b9 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/CachedRefRepository.java
@@ -48,9 +48,10 @@ class CachedRefRepository extends DelegateRepository { interface Factory { - CachedRefRepository create(Repository repo); + CachedRefRepository create(String projectName, Repository repo); } + private final String projectName; private final CachedRefDatabase refDb; private final RefUpdateWithCacheUpdate.Factory updateFactory; private final RefRenameWithCacheUpdate.Factory renameFactory; @@ -60,8 +61,10 @@ CachedRefDatabase.Factory refDbFactory, RefUpdateWithCacheUpdate.Factory updateFactory, RefRenameWithCacheUpdate.Factory renameFactory, + @Assisted String projectName, @Assisted Repository repo) { super(repo); + this.projectName = projectName; this.updateFactory = updateFactory; this.renameFactory = renameFactory; this.refDb = refDbFactory.create(this); @@ -347,4 +350,8 @@ public void create() throws IOException { getDelegate().create(); } + + public String getProjectName() { + return projectName; + } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java index 4eb0cf1..0697306 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java
@@ -37,12 +37,12 @@ @Override public Repository openRepository(Project.NameKey name) throws IOException { - return repoWrapperFactory.create(repoManager.openRepository(name)); + return repoWrapperFactory.create(name.get(), repoManager.openRepository(name)); } @Override public Repository createRepository(Project.NameKey name) throws IOException { - return repoWrapperFactory.create(repoManager.createRepository(name)); + return repoWrapperFactory.create(name.get(), repoManager.createRepository(name)); } @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java index 68de4ca..7bb9a46 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefRenameWithCacheUpdate.java
@@ -22,12 +22,11 @@ import org.eclipse.jgit.lib.RefRename; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.RefUpdate.Result; -import org.eclipse.jgit.lib.Repository; class RefRenameWithCacheUpdate extends RefRename { interface Factory { RefRenameWithCacheUpdate create( - Repository repo, + CachedRefRepository repo, RefRename delegate, @Assisted("src") RefUpdate src, @Assisted("dst") RefUpdate dst); @@ -38,14 +37,14 @@ EnumSet.of(Result.NEW, Result.FORCED, Result.FAST_FORWARD, Result.RENAMED); private final RefByNameCacheWrapper refsCache; - private final Repository repo; + private final CachedRefRepository repo; private final RefRename delegate; private final RefUpdate src; @Inject RefRenameWithCacheUpdate( RefByNameCacheWrapper refsCache, - @Assisted Repository repo, + @Assisted CachedRefRepository repo, @Assisted RefRename delegate, @Assisted("src") RefUpdate src, @Assisted("dst") RefUpdate dst) { @@ -95,7 +94,7 @@ public Result rename() throws IOException { Result r = delegate.rename(); if (SUCCESSFUL_RENAMES.contains(r)) { - refsCache.evict(repo.getIdentifier(), src.getName()); + refsCache.evict(repo.getProjectName(), src.getName()); } return r; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java index a4bee39..a8be44d 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/RefUpdateWithCacheUpdate.java
@@ -16,7 +16,8 @@ class RefUpdateWithCacheUpdate extends RefUpdate { interface Factory { - RefUpdateWithCacheUpdate create(RefDatabase refDb, Repository repo, RefUpdate delegate); + RefUpdateWithCacheUpdate create( + RefDatabase refDb, CachedRefRepository repo, RefUpdate delegate); } private static final String NOT_SUPPORTED_MSG = "Should never be called"; @@ -25,14 +26,14 @@ private final RefByNameCacheWrapper refsCache; private final RefDatabase refDb; - private final Repository repo; + private final CachedRefRepository repo; private final RefUpdate delegate; @Inject RefUpdateWithCacheUpdate( RefByNameCacheWrapper refsCache, @Assisted RefDatabase refDb, - @Assisted Repository repo, + @Assisted CachedRefRepository repo, @Assisted RefUpdate delegate) { super(delegate.getRef()); this.refsCache = refsCache; @@ -208,7 +209,7 @@ private Result evictCache(Result r) { if (SUCCESSFUL_UPDATES.contains(r)) { - refsCache.evict(repo.getIdentifier(), getName()); + refsCache.evict(repo.getProjectName(), getName()); } return r; }