diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java index 70f40132d5..7a11131168 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java @@ -32,6 +32,12 @@ public interface ProjectCache { /** Invalidate the cached information about the given project. */ public void evict(Project p); + /** + * Remove information about the given project from the cache. It will no + * longer be returned from {@link #all()}. + */ + void remove(Project p); + /** @return sorted iteration of projects. */ public abstract Iterable all(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java index 51d8fb2f60..3b1f55c1b8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java @@ -114,6 +114,20 @@ public class ProjectCacheImpl implements ProjectCache { } } + @Override + public void remove(final Project p) { + listLock.lock(); + try { + SortedSet n = list.get(ListKey.ALL); + n = new TreeSet(n); + n.remove(p.getNameKey()); + list.put(ListKey.ALL, Collections.unmodifiableSortedSet(n)); + } finally { + listLock.unlock(); + } + evict(p); + } + @Override public void onCreateProject(Project.NameKey newProjectName) { listLock.lock(); diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java index 340db7e701..469dafe5fd 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java @@ -277,6 +277,10 @@ public class RefControlTest extends TestCase { public void evict(Project p) { } + @Override + public void remove(Project p) { + } + @Override public Iterable all() { return Collections.emptySet();