diff options
author | Matthias Sohn <matthias.sohn@gmail.com> | 2022-11-21 08:00:28 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-11-21 08:00:28 +0000 |
commit | 35b42a202bdacd930d4b37f1dd2132a341622842 (patch) | |
tree | 5e51fd486f3f70040652711d24a45d805c96f637 | |
parent | 2d86020cc07384317463f07c6e5901ccd60ae9b7 (diff) | |
parent | 29c4ccc31998f6d8fba783bf34f3a13f297f685a (diff) |
Merge "Remove eTag from RevisionResource, subject to experiment" into stable-3.4
3 files changed, 20 insertions, 4 deletions
diff --git a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java index 9b86a4fe1f..269d1c413a 100644 --- a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java +++ b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java @@ -30,6 +30,7 @@ import static com.google.common.net.HttpHeaders.AUTHORIZATION; import static com.google.common.net.HttpHeaders.CONTENT_TYPE; import static com.google.common.net.HttpHeaders.ORIGIN; import static com.google.common.net.HttpHeaders.VARY; +import static com.google.gerrit.server.experiments.ExperimentFeaturesConstants.GERRIT_BACKEND_REQUEST_FEATURE_REMOVE_REVISION_ETAG; import static java.math.RoundingMode.CEILING; import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.nio.charset.StandardCharsets.UTF_8; @@ -110,7 +111,9 @@ import com.google.gerrit.server.RequestListener; import com.google.gerrit.server.audit.ExtendedHttpAuditEvent; import com.google.gerrit.server.cache.PerThreadCache; import com.google.gerrit.server.change.ChangeFinder; +import com.google.gerrit.server.change.RevisionResource; import com.google.gerrit.server.config.GerritServerConfig; +import com.google.gerrit.server.experiments.ExperimentFeatures; import com.google.gerrit.server.group.GroupAuditService; import com.google.gerrit.server.logging.Metadata; import com.google.gerrit.server.logging.PerformanceLogContext; @@ -252,6 +255,7 @@ public class RestApiServlet extends HttpServlet { final PluginSetContext<ExceptionHook> exceptionHooks; final Injector injector; final DynamicMap<DynamicOptions.DynamicBean> dynamicBeans; + final ExperimentFeatures experimentFeatures; @Inject Globals( @@ -269,7 +273,8 @@ public class RestApiServlet extends HttpServlet { RetryHelper retryHelper, PluginSetContext<ExceptionHook> exceptionHooks, Injector injector, - DynamicMap<DynamicOptions.DynamicBean> dynamicBeans) { + DynamicMap<DynamicOptions.DynamicBean> dynamicBeans, + ExperimentFeatures experimentFeatures) { this.currentUser = currentUser; this.webSession = webSession; this.paramParser = paramParser; @@ -286,6 +291,7 @@ public class RestApiServlet extends HttpServlet { allowOrigin = makeAllowOrigin(config); this.injector = injector; this.dynamicBeans = dynamicBeans; + this.experimentFeatures = experimentFeatures; } private static Pattern makeAllowOrigin(Config cfg) { @@ -775,6 +781,11 @@ public class RestApiServlet extends HttpServlet { TraceContext.newTimer( "RestApiServlet#getEtagWithRetry:resource", Metadata.builder().restViewName(rsrc.getClass().getSimpleName()).build())) { + if (rsrc instanceof RevisionResource + && globals.experimentFeatures.isFeatureEnabled( + GERRIT_BACKEND_REQUEST_FEATURE_REMOVE_REVISION_ETAG)) { + return null; + } return invokeRestEndpointWithRetry( req, traceContext, @@ -1056,7 +1067,7 @@ public class RestApiServlet extends HttpServlet { if (rsrc instanceof RestResource.HasETag) { String have = req.getHeader(HttpHeaders.IF_NONE_MATCH); - if (have != null) { + if (!Strings.isNullOrEmpty(have)) { String eTag = getEtagWithRetry(req, traceContext, (RestResource.HasETag) rsrc); return have.equals(eTag); } @@ -1134,7 +1145,9 @@ public class RestApiServlet extends HttpServlet { res.setHeader(HttpHeaders.ETAG, eTag); } else if (rsrc instanceof RestResource.HasETag) { String eTag = getEtagWithRetry(req, traceContext, (RestResource.HasETag) rsrc); - res.setHeader(HttpHeaders.ETAG, eTag); + if (!Strings.isNullOrEmpty(eTag)) { + res.setHeader(HttpHeaders.ETAG, eTag); + } } if (rsrc instanceof RestResource.HasLastModified) { res.setDateHeader( diff --git a/java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java b/java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java index af49438c33..0f8557876c 100644 --- a/java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java +++ b/java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java @@ -22,6 +22,9 @@ public class ExperimentFeaturesConstants { /** Features that are known experiments and can be referenced in the code. */ public static String UI_FEATURE_PATCHSET_COMMENTS = "UiFeature__patchset_comments"; + public static String GERRIT_BACKEND_REQUEST_FEATURE_REMOVE_REVISION_ETAG = + "GerritBackendRequestFeature__remove_revision_etag"; + /** Features, enabled by default in the current release. */ public static final ImmutableSet<String> DEFAULT_ENABLED_FEATURES = ImmutableSet.of(UI_FEATURE_PATCHSET_COMMENTS); diff --git a/java/com/google/gerrit/server/restapi/change/GetRevisionActions.java b/java/com/google/gerrit/server/restapi/change/GetRevisionActions.java index 527129cc23..f3c0fb859e 100644 --- a/java/com/google/gerrit/server/restapi/change/GetRevisionActions.java +++ b/java/com/google/gerrit/server/restapi/change/GetRevisionActions.java @@ -34,6 +34,6 @@ public class GetRevisionActions implements RestReadView<RevisionResource> { @Override public Response<Map<String, ActionInfo>> apply(RevisionResource rsrc) { - return Response.withMustRevalidate(delegate.format(rsrc)); + return Response.ok(delegate.format(rsrc)); } } |