Add ETag to failed conditional GETs

Found via s3-tests.  References apache/jclouds#209.
pull/686/head
Andrew Gaul 2024-09-05 00:32:33 +02:00
rodzic 3d2beb3319
commit cb443b780b
1 zmienionych plików z 8 dodań i 1 usunięć

Wyświetl plik

@ -23,6 +23,7 @@ import java.util.concurrent.TimeoutException;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.net.HttpHeaders;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -94,6 +95,12 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
hre.getMessage()); hre.getMessage());
return; return;
} }
String eTag = hr.getFirstHeaderOrNull(HttpHeaders.ETAG);
if (eTag != null) {
response.setHeader(HttpHeaders.ETAG, eTag);
}
int status = hr.getStatusCode(); int status = hr.getStatusCode();
switch (status) { switch (status) {
case 412: case 412:
@ -111,7 +118,7 @@ final class S3ProxyHandlerJetty extends AbstractHandler {
break; break;
default: default:
logger.debug("HttpResponseException:", hre); logger.debug("HttpResponseException:", hre);
response.sendError(status, hre.getContent()); response.setStatus(status);
break; break;
} }
baseRequest.setHandled(true); baseRequest.setHandled(true);