Search in sources :

Example 6 with Blob

use of build.buildfarm.cas.ContentAddressableStorage.Blob in project bazel-buildfarm by bazelbuild.

the class GrpcCASTest method putAddsExpiration.

@Test
public void putAddsExpiration() throws IOException, InterruptedException {
    ByteString uploadContent = ByteString.copyFromUtf8("uploaded");
    Digest digest = DIGEST_UTIL.compute(uploadContent);
    String instanceName = "test";
    ListMultimap<Digest, Runnable> onExpirations = MultimapBuilder.hashKeys().arrayListValues().build();
    Channel channel = InProcessChannelBuilder.forName(fakeServerName).directExecutor().build();
    ByteStreamUploader uploader = mock(ByteStreamUploader.class);
    GrpcCAS cas = new GrpcCAS(instanceName, channel, uploader, onExpirations);
    Runnable onExpiration = mock(Runnable.class);
    cas.put(new Blob(uploadContent, digest), onExpiration);
    verify(uploader, times(1)).uploadBlob(eq(HashCode.fromString(digest.getHash())), any(Chunker.class));
    assertThat(onExpirations.get(digest)).containsExactly(onExpiration);
    verifyZeroInteractions(onExpiration);
}
Also used : ByteStreamUploader(build.buildfarm.instance.stub.ByteStreamUploader) Blob(build.buildfarm.cas.ContentAddressableStorage.Blob) Digest(build.bazel.remote.execution.v2.Digest) ByteString(com.google.protobuf.ByteString) Channel(io.grpc.Channel) Chunker(build.buildfarm.instance.stub.Chunker) ByteString(com.google.protobuf.ByteString) Test(org.junit.Test)

Example 7 with Blob

use of build.buildfarm.cas.ContentAddressableStorage.Blob in project bazel-buildfarm by bazelbuild.

the class MemoryCASTest method duplicateEntryRegistersMultipleOnExpiration.

@Test
public void duplicateEntryRegistersMultipleOnExpiration() throws IOException, InterruptedException {
    ContentAddressableStorage storage = new MemoryCAS(10);
    DigestUtil digestUtil = new DigestUtil(DigestUtil.HashFunction.SHA256);
    Runnable mockOnExpiration = mock(Runnable.class);
    storage.put(new Blob(ByteString.copyFromUtf8("stdout"), digestUtil), mockOnExpiration);
    storage.put(new Blob(ByteString.copyFromUtf8("stdout"), digestUtil), mockOnExpiration);
    verify(mockOnExpiration, never()).run();
    storage.put(new Blob(ByteString.copyFromUtf8("stderr"), digestUtil));
    verify(mockOnExpiration, times(2)).run();
}
Also used : Blob(build.buildfarm.cas.ContentAddressableStorage.Blob) DigestUtil(build.buildfarm.common.DigestUtil) Test(org.junit.Test)

Example 8 with Blob

use of build.buildfarm.cas.ContentAddressableStorage.Blob in project bazel-buildfarm by bazelbuild.

the class MemoryCASTest method expireShouldOccurAtLimitExactly.

@Test
public void expireShouldOccurAtLimitExactly() throws IOException, InterruptedException {
    ContentAddressableStorage storage = new MemoryCAS(11);
    DigestUtil digestUtil = new DigestUtil(DigestUtil.HashFunction.SHA256);
    Runnable mockOnExpiration = mock(Runnable.class);
    storage.put(new Blob(ByteString.copyFromUtf8("stdin"), digestUtil), mockOnExpiration);
    storage.put(new Blob(ByteString.copyFromUtf8("stdout"), digestUtil), mockOnExpiration);
    verify(mockOnExpiration, never()).run();
    storage.put(new Blob(ByteString.copyFromUtf8("a"), digestUtil));
    verify(mockOnExpiration, times(1)).run();
}
Also used : Blob(build.buildfarm.cas.ContentAddressableStorage.Blob) DigestUtil(build.buildfarm.common.DigestUtil) Test(org.junit.Test)

Example 9 with Blob

use of build.buildfarm.cas.ContentAddressableStorage.Blob in project bazel-buildfarm by bazelbuild.

the class DelegateCASMap method put.

public V put(K key, V value) throws InterruptedException {
    Blob blob = new Blob(value.toByteString(), digestUtil);
    if (blob.size() == 0) {
        emptyCache.put(key, blob.getDigest());
    } else {
        digestMap.put(key, blob.getDigest());
        contentAddressableStorage.put(blob, () -> digestMap.remove(key));
    }
    return value;
}
Also used : Blob(build.buildfarm.cas.ContentAddressableStorage.Blob)

Example 10 with Blob

use of build.buildfarm.cas.ContentAddressableStorage.Blob in project bazel-buildfarm by bazelbuild.

the class Worker method createFuseExecFileSystem.

private ExecFileSystem createFuseExecFileSystem(InputStreamFactory remoteInputStreamFactory, ContentAddressableStorage storage) {
    InputStreamFactory storageInputStreamFactory = (digest, offset) -> storage.get(digest).getData().substring((int) offset).newInput();
    InputStreamFactory localPopulatingInputStreamFactory = (blobDigest, offset) -> {
        // FIXME use write
        ByteString content = ByteString.readFrom(remoteInputStreamFactory.newInput(blobDigest, offset));
        if (offset == 0) {
            // extra computations
            Blob blob = new Blob(content, digestUtil);
            // here's hoping that our digest matches...
            storage.put(blob);
        }
        return content.newInput();
    };
    return new FuseExecFileSystem(root, new FuseCAS(root, new EmptyInputStreamFactory(new FailoverInputStreamFactory(storageInputStreamFactory, localPopulatingInputStreamFactory))), storage);
}
Also used : Arrays(java.util.Arrays) LoadingCache(com.google.common.cache.LoadingCache) Blob(build.buildfarm.cas.ContentAddressableStorage.Blob) ShardWorker(build.buildfarm.v1test.ShardWorker) MemoryCAS(build.buildfarm.cas.MemoryCAS) PutOperationStage(build.buildfarm.worker.PutOperationStage) Status(io.grpc.Status) IOSupplier(build.buildfarm.common.function.IOSupplier) Path(java.nio.file.Path) ReportResultStage(build.buildfarm.worker.ReportResultStage) Set(java.util.Set) MoreExecutors.directExecutor(com.google.common.util.concurrent.MoreExecutors.directExecutor) ByteStreams(com.google.common.io.ByteStreams) DigestUtil(build.buildfarm.common.DigestUtil) Strings(com.google.common.base.Strings) Code(io.grpc.Status.Code) UserPrincipal(java.nio.file.attribute.UserPrincipal) Lists(com.google.common.collect.Lists) ServerBuilder(io.grpc.ServerBuilder) Server(io.grpc.Server) Nullable(javax.annotation.Nullable) Backplane(build.buildfarm.backplane.Backplane) ContentAddressableStorageConfig(build.buildfarm.v1test.ContentAddressableStorageConfig) ExecuteActionStage(build.buildfarm.worker.ExecuteActionStage) ServingStatus(io.grpc.health.v1.HealthCheckResponse.ServingStatus) CASFileCache(build.buildfarm.cas.cfc.CASFileCache) Files(java.nio.file.Files) Executor(java.util.concurrent.Executor) PipelineStage(build.buildfarm.worker.PipelineStage) ShardWorkerOptions(build.buildfarm.common.config.ShardWorkerOptions) Throwables(com.google.common.base.Throwables) IOException(java.io.IOException) ContentAddressableStorages.createGrpcCAS(build.buildfarm.cas.ContentAddressableStorages.createGrpcCAS) AdminGrpc(build.buildfarm.v1test.AdminGrpc) InputStreamReader(java.io.InputStreamReader) File(java.io.File) ExecutionException(java.util.concurrent.ExecutionException) InputFetchStage(build.buildfarm.worker.InputFetchStage) Paths(java.nio.file.Paths) ManagedChannel(io.grpc.ManagedChannel) OptionsParser(com.google.devtools.common.options.OptionsParser) NegotiationType(io.grpc.netty.NegotiationType) RequestMetadata(build.bazel.remote.execution.v2.RequestMetadata) Random(java.util.Random) ContentAddressableStorage(build.buildfarm.cas.ContentAddressableStorage) WorkerStubs(build.buildfarm.instance.shard.WorkerStubs) InputStreamFactory(build.buildfarm.common.InputStreamFactory) SettableFuture(com.google.common.util.concurrent.SettableFuture) RemoteInputStreamFactory(build.buildfarm.instance.shard.RemoteInputStreamFactory) ConfigAdjuster(build.buildfarm.common.config.ConfigAdjuster) Digest(build.bazel.remote.execution.v2.Digest) Gauge(io.prometheus.client.Gauge) Utils.getUser(build.buildfarm.common.io.Utils.getUser) PrometheusPublisher(build.buildfarm.metrics.prometheus.PrometheusPublisher) TextFormat(com.google.protobuf.TextFormat) ByteStreamService(build.buildfarm.server.ByteStreamService) MatchStage(build.buildfarm.worker.MatchStage) Executors.newSingleThreadExecutor(java.util.concurrent.Executors.newSingleThreadExecutor) UUID(java.util.UUID) FileSystem(java.nio.file.FileSystem) Logger(java.util.logging.Logger) String.format(java.lang.String.format) Instance(build.buildfarm.instance.Instance) Preconditions.checkState(com.google.common.base.Preconditions.checkState) ByteString(com.google.protobuf.ByteString) List(java.util.List) HashFunction(build.buildfarm.common.DigestUtil.HashFunction) Size(build.buildfarm.common.Size) ReindexCasRequest(build.buildfarm.v1test.ReindexCasRequest) LoggingMain(build.buildfarm.common.LoggingMain) ContentAddressableStorageService(build.buildfarm.server.ContentAddressableStorageService) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) DisableScaleInProtectionRequest(build.buildfarm.v1test.DisableScaleInProtectionRequest) INFO(java.util.logging.Level.INFO) ConfigurationException(javax.naming.ConfigurationException) Operation(com.google.longrunning.Operation) Counter(io.prometheus.client.Counter) SEVERE(java.util.logging.Level.SEVERE) Level(java.util.logging.Level) ImmutableList(com.google.common.collect.ImmutableList) DAYS(java.util.concurrent.TimeUnit.DAYS) FeedbackOutputStream(build.buildfarm.common.io.FeedbackOutputStream) FuseCAS(build.buildfarm.worker.FuseCAS) HealthStatusManager(io.grpc.services.HealthStatusManager) ExecutorService(java.util.concurrent.ExecutorService) OutputStream(java.io.OutputStream) DequeueMatchSettings(build.buildfarm.worker.DequeueMatchSettings) FilesystemCASConfig(build.buildfarm.v1test.FilesystemCASConfig) Iterator(java.util.Iterator) RedisShardBackplane(build.buildfarm.instance.shard.RedisShardBackplane) Executors.newFixedThreadPool(java.util.concurrent.Executors.newFixedThreadPool) Write(build.buildfarm.common.Write) NettyChannelBuilder(io.grpc.netty.NettyChannelBuilder) Pipeline(build.buildfarm.worker.Pipeline) ShardWorkerConfig(build.buildfarm.v1test.ShardWorkerConfig) Collections(java.util.Collections) SECONDS(java.util.concurrent.TimeUnit.SECONDS) InputStream(java.io.InputStream) Blob(build.buildfarm.cas.ContentAddressableStorage.Blob) ByteString(com.google.protobuf.ByteString) FuseCAS(build.buildfarm.worker.FuseCAS) InputStreamFactory(build.buildfarm.common.InputStreamFactory) RemoteInputStreamFactory(build.buildfarm.instance.shard.RemoteInputStreamFactory)

Aggregations

Blob (build.buildfarm.cas.ContentAddressableStorage.Blob)15 Test (org.junit.Test)13 ByteString (com.google.protobuf.ByteString)10 Digest (build.bazel.remote.execution.v2.Digest)5 DigestUtil (build.buildfarm.common.DigestUtil)5 RequestMetadata (build.bazel.remote.execution.v2.RequestMetadata)4 FeedbackOutputStream (build.buildfarm.common.io.FeedbackOutputStream)4 UUID (java.util.UUID)4 Write (build.buildfarm.common.Write)3 NullWrite (build.buildfarm.common.Write.NullWrite)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 Utils.getInterruptiblyOrIOException (build.buildfarm.common.io.Utils.getInterruptiblyOrIOException)2 TimeUnit (java.util.concurrent.TimeUnit)2 Backplane (build.buildfarm.backplane.Backplane)1 ContentAddressableStorage (build.buildfarm.cas.ContentAddressableStorage)1 ContentAddressableStorages.createGrpcCAS (build.buildfarm.cas.ContentAddressableStorages.createGrpcCAS)1 MemoryCAS (build.buildfarm.cas.MemoryCAS)1 CASFileCache (build.buildfarm.cas.cfc.CASFileCache)1 HashFunction (build.buildfarm.common.DigestUtil.HashFunction)1