From 2a67711f962bfb6d0baade605413bc2b7cce4f20 Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Thu, 7 Jan 2016 12:05:27 -0500 Subject: [PATCH] Add a JSON version number to the ChangeResource ETag I62aecac9 added a new field to ChangeInfo that is populated on all requests, and this field is now required to render the submit strategy on the change screen. Unfortunately, this didn't change the ETag of existing change resources, so browsers with cached old ChangeInfo will not see the submit type until the change is updated or the cache is refreshed. Try to prevent this in the future by encouraging developers to bump a version number to invalidate existing ETags. Change-Id: I8bf93ba570a43a1118b584e8e83860c48274c1da --- .../google/gerrit/server/change/ChangeResource.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeResource.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeResource.java index 2a69d46fff..4ee6d334e3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeResource.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeResource.java @@ -34,6 +34,14 @@ import com.google.inject.TypeLiteral; import org.eclipse.jgit.lib.ObjectId; public class ChangeResource implements RestResource, HasETag { + /** + * JSON format version number for ETag computations. + *

+ * Should be bumped on any JSON format change (new fields, etc.) so that + * otherwise unmodified changes get new ETags. + */ + public static final int JSON_FORMAT_VERSION = 1; + public static final TypeLiteral> CHANGE_KIND = new TypeLiteral>() {}; @@ -74,7 +82,8 @@ public class ChangeResource implements RestResource, HasETag { // This includes all information relevant for ETag computation // unrelated to the UI. public void prepareETag(Hasher h, CurrentUser user) { - h.putLong(getChange().getLastUpdatedOn().getTime()) + h.putInt(JSON_FORMAT_VERSION) + .putLong(getChange().getLastUpdatedOn().getTime()) .putInt(getChange().getRowVersion()) .putInt(user.isIdentifiedUser() ? user.getAccountId().get() : 0);