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 <edwin.kempin@sap.com>
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 2b0f856..7d1ad51 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.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 @@
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<PerRequestProjectControlCache> userCache;
private final Project update;
@@ -50,13 +51,14 @@
ChangeProjectSettings(
final ProjectDetailFactory.Factory projectDetailFactory,
final ProjectControl.Factory projectControlFactory,
- final ProjectCache projectCache, final GitRepositoryManager mgr,
+ final GitRepositoryManager mgr,
final MetaDataUpdate.User metaDataUpdateFactory,
+ final Provider<PerRequestProjectControlCache> 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 @@
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 500ac06..1a96381 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 @@
}
return ctl;
}
+
+ public void evict(Project project) {
+ projectCache.evict(project);
+ controls.remove(project.getNameKey());
+ }
}