Skip to content

Commit

Permalink
Set oldest_content_accepted for remote downloader requests without th…
Browse files Browse the repository at this point in the history
…e checksum

This PR address the #23932 issue with remote downloader.

Closes #23970.

PiperOrigin-RevId: 686180819
Change-Id: Ia36c5793622bd1ac1fdaa9ef1326ddc385a5a01f
  • Loading branch information
mislavmandaricaxilis authored and copybara-github committed Oct 15, 2024
1 parent 986150a commit 60638af
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ java_library(
srcs = glob(["*.java"]),
deps = [
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
"//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/remote:ReferenceCountedChannel",
"//src/main/java/com/google/devtools/build/lib/remote:Retrier",
Expand All @@ -27,6 +28,7 @@ java_library(
"//third_party:guava",
"//third_party:jsr305",
"//third_party/grpc-java:grpc-jar",
"@protobuf//:protobuf_java_util",
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_grpc",
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_proto",
"@remoteapis//:build_bazel_remote_execution_v2_remote_execution_java_proto",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.google.devtools.build.lib.bazel.repository.downloader.Checksum;
import com.google.devtools.build.lib.bazel.repository.downloader.Downloader;
import com.google.devtools.build.lib.bazel.repository.downloader.HashOutputStream;
import com.google.devtools.build.lib.clock.BlazeClock;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.remote.ReferenceCountedChannel;
Expand All @@ -38,13 +39,15 @@
import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
import com.google.devtools.build.lib.remote.util.Utils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.protobuf.util.Timestamps;
import io.grpc.CallCredentials;
import io.grpc.Channel;
import io.grpc.StatusRuntimeException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -235,6 +238,12 @@ static FetchBlobRequest newFetchBlobRequest(
.setName(QUALIFIER_CHECKSUM_SRI)
.setValue(checksum.get().toSubresourceIntegrity())
.build());
} else {
// If no checksum is provided, never accept cached content.
// Timestamp is offset by an hour to account for clock skew.
requestBuilder.setOldestContentAccepted(
Timestamps.fromMillis(
BlazeClock.instance().now().plus(Duration.ofHours(1)).toEpochMilli()));
}

if (!Strings.isNullOrEmpty(canonicalId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/authandtls",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/cache",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
"//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/remote",
"//src/main/java/com/google/devtools/build/lib/remote/common",
Expand All @@ -44,6 +45,7 @@ java_library(
"//third_party:truth",
"//third_party/grpc-java:grpc-jar",
"@protobuf//:protobuf_java",
"@protobuf//:protobuf_java_util",
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_grpc",
"@remoteapis//:build_bazel_remote_asset_v1_remote_asset_java_proto",
"@remoteapis//:build_bazel_remote_execution_v2_remote_execution_java_proto",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.google.devtools.build.lib.bazel.repository.downloader.Checksum;
import com.google.devtools.build.lib.bazel.repository.downloader.Downloader;
import com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException;
import com.google.devtools.build.lib.clock.BlazeClock;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.remote.ChannelConnectionWithServerCapabilitiesFactory;
import com.google.devtools.build.lib.remote.ReferenceCountedChannel;
Expand All @@ -54,13 +55,15 @@
import com.google.devtools.build.lib.remote.util.InMemoryCacheClient;
import com.google.devtools.build.lib.remote.util.TestUtils;
import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
import com.google.devtools.build.lib.testutil.ManualClock;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.vfs.DigestHashFunction;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.SyscallCache;
import com.google.devtools.common.options.Options;
import com.google.protobuf.ByteString;
import com.google.protobuf.util.Timestamps;
import io.grpc.CallCredentials;
import io.grpc.ManagedChannel;
import io.grpc.Server;
Expand All @@ -73,6 +76,7 @@
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -90,6 +94,8 @@
@RunWith(JUnit4.class)
public class GrpcRemoteDownloaderTest {

private static final ManualClock clock = new ManualClock();

private static final DigestUtil DIGEST_UTIL =
new DigestUtil(SyscallCache.NO_CACHE, DigestHashFunction.SHA256);

Expand Down Expand Up @@ -117,6 +123,8 @@ public final void setUp() throws Exception {
context = RemoteActionExecutionContext.create(metadata);

retryService = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(1));

BlazeClock.setClock(clock);
}

@After
Expand Down Expand Up @@ -212,6 +220,8 @@ public void fetchBlob(
.isEqualTo(
FetchBlobRequest.newBuilder()
.setDigestFunction(DIGEST_UTIL.getDigestFunction())
.setOldestContentAccepted(
Timestamps.fromMillis(clock.advance(Duration.ofHours(1))))
.addUris("http://example.com/content.txt")
.build());
responseObserver.onNext(
Expand Down Expand Up @@ -474,4 +484,29 @@ public void testFetchBlobRequest_withoutCredentialsPropagation() throws Exceptio
Qualifier.newBuilder().setName("bazel.canonical_id").setValue("canonical ID"))
.build());
}

@Test
public void testFetchBlobRequest_withoutChecksum() throws Exception {
FetchBlobRequest request =
GrpcRemoteDownloader.newFetchBlobRequest(
"instance name",
false,
ImmutableList.of(new URI("http://example.com/").toURL()),
Optional.<Checksum>empty(),
"canonical ID",
DIGEST_UTIL.getDigestFunction(),
ImmutableMap.of(),
StaticCredentials.EMPTY);

assertThat(request)
.isEqualTo(
FetchBlobRequest.newBuilder()
.setInstanceName("instance name")
.setDigestFunction(DIGEST_UTIL.getDigestFunction())
.setOldestContentAccepted(Timestamps.fromMillis(clock.advance(Duration.ofHours(1))))
.addUris("http://example.com/")
.addQualifiers(
Qualifier.newBuilder().setName("bazel.canonical_id").setValue("canonical ID"))
.build());
}
}

0 comments on commit 60638af

Please sign in to comment.