Drop support for etags
We longer use etags, hence drop the support for etags in our REST
framework.
Release-Notes: skip
Change-Id: I9f4fe85ddca791e9c18345798f327c7938657da9
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/java/com/google/gerrit/extensions/restapi/ETagView.java b/java/com/google/gerrit/extensions/restapi/ETagView.java
deleted file mode 100644
index 9ac1706..0000000
--- a/java/com/google/gerrit/extensions/restapi/ETagView.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.extensions.restapi;
-
-/** A view which may change, although the underlying resource did not change */
-public interface ETagView<R extends RestResource> extends RestReadView<R> {
- String getETag(R rsrc);
-}
diff --git a/java/com/google/gerrit/extensions/restapi/RestResource.java b/java/com/google/gerrit/extensions/restapi/RestResource.java
index 3c8144a..30916bc 100644
--- a/java/com/google/gerrit/extensions/restapi/RestResource.java
+++ b/java/com/google/gerrit/extensions/restapi/RestResource.java
@@ -29,9 +29,4 @@
/** Returns time for the Last-Modified header. HTTP truncates the header value to seconds. */
Timestamp getLastModified();
}
-
- /** A resource with an ETag. */
- public interface HasETag {
- String getETag();
- }
}
diff --git a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
index 6951398..0844ca9 100644
--- a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
+++ b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
@@ -40,7 +40,6 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
-import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Iterables;
@@ -65,7 +64,6 @@
import com.google.gerrit.extensions.restapi.BinaryResult;
import com.google.gerrit.extensions.restapi.CacheControl;
import com.google.gerrit.extensions.restapi.DefaultInput;
-import com.google.gerrit.extensions.restapi.ETagView;
import com.google.gerrit.extensions.restapi.IdString;
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.NeedsParams;
@@ -110,12 +108,10 @@
import com.google.gerrit.server.change.ChangeFinder;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.group.GroupAuditService;
-import com.google.gerrit.server.logging.Metadata;
import com.google.gerrit.server.logging.PerformanceLogContext;
import com.google.gerrit.server.logging.PerformanceLogger;
import com.google.gerrit.server.logging.RequestId;
import com.google.gerrit.server.logging.TraceContext;
-import com.google.gerrit.server.logging.TraceContext.TraceTimer;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.permissions.GlobalPermission;
import com.google.gerrit.server.permissions.PermissionBackend;
@@ -497,7 +493,7 @@
checkRequiresCapability(viewData);
}
- if (notModified(req, traceContext, viewData, rsrc)) {
+ if (notModified(req, rsrc)) {
logger.atFinest().log("REST call succeeded: %d", SC_NOT_MODIFIED);
res.sendError(SC_NOT_MODIFIED);
return;
@@ -607,7 +603,7 @@
statusCode = response.statusCode();
response.headers().forEach((k, v) -> res.setHeader(k, v));
- configureCaching(req, res, traceContext, rsrc, viewData, response.caching());
+ configureCaching(req, res, rsrc, response.caching());
res.setStatus(statusCode);
logger.atFinest().log("REST call succeeded: %d", statusCode);
}
@@ -800,47 +796,6 @@
globals.webSession.get().resetRefUpdatedEvents();
}
- private String getEtagWithRetry(
- HttpServletRequest req,
- TraceContext traceContext,
- ViewData viewData,
- ETagView<RestResource> view,
- RestResource rsrc) {
- try (TraceTimer ignored =
- TraceContext.newTimer(
- "RestApiServlet#getEtagWithRetry:view",
- Metadata.builder().restViewName(getViewName(viewData)).build())) {
- return invokeRestEndpointWithRetry(
- req,
- traceContext,
- getViewName(viewData) + "#etag",
- ActionType.REST_READ_REQUEST,
- () -> view.getETag(rsrc));
- } catch (Exception e) {
- Throwables.throwIfUnchecked(e);
- throw new IllegalStateException("Failed to get ETag for view", e);
- }
- }
-
- @Nullable
- private String getEtagWithRetry(
- HttpServletRequest req, TraceContext traceContext, RestResource.HasETag rsrc) {
- try (TraceTimer ignored =
- TraceContext.newTimer(
- "RestApiServlet#getEtagWithRetry:resource",
- Metadata.builder().restViewName(rsrc.getClass().getSimpleName()).build())) {
- return invokeRestEndpointWithRetry(
- req,
- traceContext,
- rsrc.getClass().getSimpleName() + "#etag",
- ActionType.REST_READ_REQUEST,
- () -> rsrc.getETag());
- } catch (Exception e) {
- Throwables.throwIfUnchecked(e);
- throw new IllegalStateException("Failed to get ETag for resource", e);
- }
- }
-
private RestResource parseResourceWithRetry(
HttpServletRequest req,
TraceContext traceContext,
@@ -1012,30 +967,11 @@
return defaultMessage;
}
- private boolean notModified(
- HttpServletRequest req, TraceContext traceContext, ViewData viewData, RestResource rsrc) {
+ private boolean notModified(HttpServletRequest req, RestResource rsrc) {
if (!isRead(req)) {
return false;
}
- RestView<RestResource> view = viewData.view;
- if (view instanceof ETagView) {
- String have = req.getHeader(HttpHeaders.IF_NONE_MATCH);
- if (have != null) {
- String eTag =
- getEtagWithRetry(req, traceContext, viewData, (ETagView<RestResource>) view, rsrc);
- return have.equals(eTag);
- }
- }
-
- if (rsrc instanceof RestResource.HasETag) {
- String have = req.getHeader(HttpHeaders.IF_NONE_MATCH);
- if (!Strings.isNullOrEmpty(have)) {
- String eTag = getEtagWithRetry(req, traceContext, (RestResource.HasETag) rsrc);
- return have.equals(eTag);
- }
- }
-
if (rsrc instanceof RestResource.HasLastModified) {
Timestamp m = ((RestResource.HasLastModified) rsrc).getLastModified();
long d = req.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE);
@@ -1047,12 +983,7 @@
}
private <R extends RestResource> void configureCaching(
- HttpServletRequest req,
- HttpServletResponse res,
- TraceContext traceContext,
- R rsrc,
- ViewData viewData,
- CacheControl cacheControl) {
+ HttpServletRequest req, HttpServletResponse res, R rsrc, CacheControl cacheControl) {
setCacheHeaders(req, res, cacheControl);
if (isRead(req)) {
switch (cacheControl.getType()) {
@@ -1060,10 +991,10 @@
default:
break;
case PRIVATE:
- addResourceStateHeaders(req, res, traceContext, viewData, rsrc);
+ addResourceStateHeaders(res, rsrc);
break;
case PUBLIC:
- addResourceStateHeaders(req, res, traceContext, viewData, rsrc);
+ addResourceStateHeaders(res, rsrc);
break;
}
}
@@ -1095,23 +1026,7 @@
}
}
- private void addResourceStateHeaders(
- HttpServletRequest req,
- HttpServletResponse res,
- TraceContext traceContext,
- ViewData viewData,
- RestResource rsrc) {
- RestView<RestResource> view = viewData.view;
- if (view instanceof ETagView) {
- String eTag =
- getEtagWithRetry(req, traceContext, viewData, (ETagView<RestResource>) view, rsrc);
- res.setHeader(HttpHeaders.ETAG, eTag);
- } else if (rsrc instanceof RestResource.HasETag) {
- String eTag = getEtagWithRetry(req, traceContext, (RestResource.HasETag) rsrc);
- if (!Strings.isNullOrEmpty(eTag)) {
- res.setHeader(HttpHeaders.ETAG, eTag);
- }
- }
+ private void addResourceStateHeaders(HttpServletResponse res, RestResource rsrc) {
if (rsrc instanceof RestResource.HasLastModified) {
res.setDateHeader(
HttpHeaders.LAST_MODIFIED,