From 5746c35592933c71b539d8189674c845faf77638 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Thu, 3 Nov 2011 09:46:03 +0100 Subject: [PATCH] Evict project in user cache on save of project meta data On saving of the project description and project options the project is not evicted from the user cache (PerRequestProjectControlCache). As a result the ProjectInfoScreen is showing the old data after save. Only when the page is reloaded the new data is displayed. This change evicts the project from the user cache when the project meta data is changed, so that the ProjectInfoScreen always shows the correct data. Bug: issue 1161 Change-Id: I6b23d73c0befdb051d6bde9a8ad309028e04d3ae Signed-off-by: Edwin Kempin --- .../httpd/rpc/project/ChangeProjectSettings.java | 12 +++++++----- .../project/PerRequestProjectControlCache.java | 5 +++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java index 2b0f8561cf..7d1ad51ca1 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ChangeProjectSettings.java @@ -21,11 +21,12 @@ import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.MetaDataUpdate; import com.google.gerrit.server.git.ProjectConfig; import com.google.gerrit.server.project.NoSuchProjectException; -import com.google.gerrit.server.project.ProjectCache; +import com.google.gerrit.server.project.PerRequestProjectControlCache; import com.google.gerrit.server.project.ProjectControl; import com.google.gwtorm.client.OrmConcurrencyException; import com.google.gwtorm.client.OrmException; import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; import org.eclipse.jgit.errors.ConfigInvalidException; @@ -40,9 +41,9 @@ class ChangeProjectSettings extends Handler { private final ProjectDetailFactory.Factory projectDetailFactory; private final ProjectControl.Factory projectControlFactory; - private final ProjectCache projectCache; private final GitRepositoryManager mgr; private final MetaDataUpdate.User metaDataUpdateFactory; + private final Provider userCache; private final Project update; @@ -50,13 +51,14 @@ class ChangeProjectSettings extends Handler { ChangeProjectSettings( final ProjectDetailFactory.Factory projectDetailFactory, final ProjectControl.Factory projectControlFactory, - final ProjectCache projectCache, final GitRepositoryManager mgr, + final GitRepositoryManager mgr, final MetaDataUpdate.User metaDataUpdateFactory, + final Provider uc, @Assisted final Project update) { this.projectDetailFactory = projectDetailFactory; this.projectControlFactory = projectControlFactory; - this.projectCache = projectCache; this.mgr = mgr; + this.userCache = uc; this.metaDataUpdateFactory = metaDataUpdateFactory; this.update = update; @@ -83,7 +85,7 @@ class ChangeProjectSettings extends Handler { md.setMessage("Modified project settings\n"); if (config.commit(md)) { mgr.setProjectDescription(projectName, update.getDescription()); - projectCache.evict(config.getProject()); + userCache.get().evict(config.getProject()); } else { throw new OrmConcurrencyException("Cannot update " + projectName); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerRequestProjectControlCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerRequestProjectControlCache.java index 500ac06309..1a963814d5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerRequestProjectControlCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerRequestProjectControlCache.java @@ -49,4 +49,9 @@ public class PerRequestProjectControlCache { } return ctl; } + + public void evict(Project project) { + projectCache.evict(project); + controls.remove(project.getNameKey()); + } }