Skip to content

Commit 9bace62

Browse files
[7.5.0] Set oldest_content_accepted for remote downloader requests wi… (#24844)
…thout the checksum This PR address the #23932 issue with remote downloader. Closes #23970. PiperOrigin-RevId: 686180819 Change-Id: Ia36c5793622bd1ac1fdaa9ef1326ddc385a5a01f (cherry picked from commit 60638af) Fixes #24837 Co-authored-by: Mislav Mandaric <[email protected]>
1 parent 2ffb963 commit 9bace62

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

src/main/java/com/google/devtools/build/lib/remote/downloader/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ java_library(
1616
srcs = glob(["*.java"]),
1717
deps = [
1818
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
19+
"//src/main/java/com/google/devtools/build/lib/clock",
1920
"//src/main/java/com/google/devtools/build/lib/events",
2021
"//src/main/java/com/google/devtools/build/lib/remote:ReferenceCountedChannel",
2122
"//src/main/java/com/google/devtools/build/lib/remote:Retrier",
@@ -27,6 +28,7 @@ java_library(
2728
"//third_party:guava",
2829
"//third_party:jsr305",
2930
"//third_party/grpc-java:grpc-jar",
31+
"@com_google_protobuf//:protobuf_java_util",
3032
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_grpc",
3133
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_proto",
3234
"@remoteapis//:build_bazel_remote_execution_v2_remote_execution_java_proto",

src/main/java/com/google/devtools/build/lib/remote/downloader/GrpcRemoteDownloader.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.devtools.build.lib.bazel.repository.downloader.Checksum;
2929
import com.google.devtools.build.lib.bazel.repository.downloader.Downloader;
3030
import com.google.devtools.build.lib.bazel.repository.downloader.HashOutputStream;
31+
import com.google.devtools.build.lib.clock.BlazeClock;
3132
import com.google.devtools.build.lib.events.Event;
3233
import com.google.devtools.build.lib.events.ExtendedEventHandler;
3334
import com.google.devtools.build.lib.remote.ReferenceCountedChannel;
@@ -38,12 +39,14 @@
3839
import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
3940
import com.google.devtools.build.lib.remote.util.Utils;
4041
import com.google.devtools.build.lib.vfs.Path;
42+
import com.google.protobuf.util.Timestamps;
4143
import io.grpc.CallCredentials;
4244
import io.grpc.Channel;
4345
import io.grpc.StatusRuntimeException;
4446
import java.io.IOException;
4547
import java.io.OutputStream;
4648
import java.net.URL;
49+
import java.time.Duration;
4750
import java.util.List;
4851
import java.util.Map;
4952
import java.util.Optional;
@@ -199,6 +202,12 @@ static FetchBlobRequest newFetchBlobRequest(
199202
.setName(QUALIFIER_CHECKSUM_SRI)
200203
.setValue(checksum.get().toSubresourceIntegrity())
201204
.build());
205+
} else {
206+
// If no checksum is provided, never accept cached content.
207+
// Timestamp is offset by an hour to account for clock skew.
208+
requestBuilder.setOldestContentAccepted(
209+
Timestamps.fromMillis(
210+
BlazeClock.instance().now().plus(Duration.ofHours(1)).toEpochMilli()));
202211
}
203212

204213
if (!Strings.isNullOrEmpty(canonicalId)) {

src/test/java/com/google/devtools/build/lib/remote/downloader/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ java_library(
2424
"//src/main/java/com/google/devtools/build/lib/authandtls",
2525
"//src/main/java/com/google/devtools/build/lib/bazel/repository/cache",
2626
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
27+
"//src/main/java/com/google/devtools/build/lib/clock",
2728
"//src/main/java/com/google/devtools/build/lib/events",
2829
"//src/main/java/com/google/devtools/build/lib/remote",
2930
"//src/main/java/com/google/devtools/build/lib/remote/common",
@@ -43,6 +44,7 @@ java_library(
4344
"//third_party:truth",
4445
"//third_party/grpc-java:grpc-jar",
4546
"//third_party/protobuf:protobuf_java",
47+
"@com_google_protobuf//:protobuf_java_util",
4648
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_grpc",
4749
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_proto",
4850
"@remoteapis//:build_bazel_remote_execution_v2_remote_execution_java_proto",

src/test/java/com/google/devtools/build/lib/remote/downloader/GrpcRemoteDownloaderTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.google.devtools.build.lib.bazel.repository.downloader.Checksum;
4040
import com.google.devtools.build.lib.bazel.repository.downloader.Downloader;
4141
import com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException;
42+
import com.google.devtools.build.lib.clock.BlazeClock;
4243
import com.google.devtools.build.lib.events.ExtendedEventHandler;
4344
import com.google.devtools.build.lib.remote.ChannelConnectionWithServerCapabilitiesFactory;
4445
import com.google.devtools.build.lib.remote.ReferenceCountedChannel;
@@ -51,13 +52,15 @@
5152
import com.google.devtools.build.lib.remote.util.InMemoryCacheClient;
5253
import com.google.devtools.build.lib.remote.util.TestUtils;
5354
import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
55+
import com.google.devtools.build.lib.testutil.ManualClock;
5456
import com.google.devtools.build.lib.testutil.Scratch;
5557
import com.google.devtools.build.lib.vfs.DigestHashFunction;
5658
import com.google.devtools.build.lib.vfs.FileSystemUtils;
5759
import com.google.devtools.build.lib.vfs.Path;
5860
import com.google.devtools.build.lib.vfs.SyscallCache;
5961
import com.google.devtools.common.options.Options;
6062
import com.google.protobuf.ByteString;
63+
import com.google.protobuf.util.Timestamps;
6164
import io.grpc.CallCredentials;
6265
import io.grpc.ManagedChannel;
6366
import io.grpc.Server;
@@ -68,7 +71,9 @@
6871
import io.reactivex.rxjava3.core.Single;
6972
import java.io.IOException;
7073
import java.io.InputStream;
74+
import java.net.URI;
7175
import java.net.URL;
76+
import java.time.Duration;
7277
import java.util.List;
7378
import java.util.Map;
7479
import java.util.Optional;
@@ -85,6 +90,8 @@
8590
@RunWith(JUnit4.class)
8691
public class GrpcRemoteDownloaderTest {
8792

93+
private static final ManualClock clock = new ManualClock();
94+
8895
private static final DigestUtil DIGEST_UTIL =
8996
new DigestUtil(SyscallCache.NO_CACHE, DigestHashFunction.SHA256);
9097

@@ -112,6 +119,8 @@ public final void setUp() throws Exception {
112119
context = RemoteActionExecutionContext.create(metadata);
113120

114121
retryService = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(1));
122+
123+
BlazeClock.setClock(clock);
115124
}
116125

117126
@After
@@ -207,6 +216,8 @@ public void fetchBlob(
207216
.isEqualTo(
208217
FetchBlobRequest.newBuilder()
209218
.setDigestFunction(DIGEST_UTIL.getDigestFunction())
219+
.setOldestContentAccepted(
220+
Timestamps.fromMillis(clock.advance(Duration.ofHours(1))))
210221
.addUris("http://example.com/content.txt")
211222
.build());
212223
responseObserver.onNext(
@@ -385,4 +396,27 @@ public void testFetchBlobRequest() throws Exception {
385396
.setValue("foo,bar"))
386397
.build());
387398
}
399+
400+
@Test
401+
public void testFetchBlobRequest_withoutChecksum() throws Exception {
402+
FetchBlobRequest request =
403+
GrpcRemoteDownloader.newFetchBlobRequest(
404+
"instance name",
405+
ImmutableList.of(new URI("http://example.com/").toURL()),
406+
Optional.empty(),
407+
"canonical ID",
408+
DIGEST_UTIL.getDigestFunction(),
409+
ImmutableMap.of());
410+
411+
assertThat(request)
412+
.isEqualTo(
413+
FetchBlobRequest.newBuilder()
414+
.setInstanceName("instance name")
415+
.setDigestFunction(DIGEST_UTIL.getDigestFunction())
416+
.setOldestContentAccepted(Timestamps.fromMillis(clock.advance(Duration.ofHours(1))))
417+
.addUris("http://example.com/")
418+
.addQualifiers(
419+
Qualifier.newBuilder().setName("bazel.canonical_id").setValue("canonical ID"))
420+
.build());
421+
}
388422
}

0 commit comments

Comments
 (0)