Fix projects cache eviction on Project.NameKey Since Change-Id: Ifaebf2 the projects cache key has changed its data type from String to Project.NameKey. The rationale behind the breaking change is still unknown because the commit message did not specify the reason; however, the data type must change also in the multi-site plugin cache eviction so that projects cache eviction can be restored. Bug: Issue 14254 Change-Id: Id1484b08c5bde59d8d36b4e70eef345822f0aadd
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParser.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParser.java index 0bbdada..b69cb91 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParser.java +++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParser.java
@@ -17,6 +17,7 @@ import com.google.common.base.MoreObjects; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.AccountGroup; +import com.google.gerrit.entities.Project; import com.google.gerrit.server.events.EventGson; import com.google.gson.Gson; import com.google.gson.JsonElement; @@ -46,6 +47,9 @@ case Constants.GROUPS_MEMBERS: key = AccountGroup.uuid(jsonElement(json).getAsJsonObject().get("uuid").getAsString()); break; + case Constants.PROJECTS: + key = Project.nameKey(jsonElement(json).getAsString()); + break; case Constants.PROJECT_LIST: key = gson.fromJson(nullToEmpty(json).toString(), Object.class); break;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParserTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParserTest.java index 12bdb74..cb4a223 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParserTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/GsonParserTest.java
@@ -18,6 +18,7 @@ import com.google.gerrit.entities.Account; import com.google.gerrit.entities.AccountGroup; +import com.google.gerrit.entities.Project; import com.google.gerrit.server.events.EventGsonProvider; import com.google.gson.Gson; import com.googlesource.gerrit.plugins.multisite.cache.Constants; @@ -51,9 +52,16 @@ } @Test + public void projectNameKeyParse() { + Project.NameKey name = Project.nameKey("foo"); + String json = gson.toJson(name); + assertThat(name).isEqualTo(gsonParser.fromJson(Constants.PROJECTS, json)); + } + + @Test public void stringParse() { String key = "key"; - assertThat(key).isEqualTo(gsonParser.fromJson(Constants.PROJECTS, key)); + assertThat(key).isEqualTo(gsonParser.fromJson("any-cache-with-string-key", key)); } @Test