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);
}
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();
}
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();
}
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;
}
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);
}
Aggregations