Search in sources :

Example 1 with StartupCacheResults

use of build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults in project bazel-buildfarm by bazelbuild.

the class CASFileCacheTest method startSkipsLoadingExistingBlob.

@Test
public void startSkipsLoadingExistingBlob() throws IOException, InterruptedException {
    FileStore fileStore = Files.getFileStore(root);
    ByteString blob = ByteString.copyFromUtf8("blob");
    Digest blobDigest = DIGEST_UTIL.compute(blob);
    Path path = fileCache.getPath(fileCache.getKey(blobDigest, false));
    Path execPath = fileCache.getPath(fileCache.getKey(blobDigest, true));
    Files.write(path, blob.toByteArray());
    EvenMoreFiles.setReadOnlyPerms(path, false, fileStore);
    Files.write(execPath, blob.toByteArray());
    EvenMoreFiles.setReadOnlyPerms(execPath, true, fileStore);
    StartupCacheResults results = fileCache.start(/* skipLoad=*/
    true);
    // check the startup results to ensure our two files were processed
    assertThat(results.load.loadSkipped).isTrue();
    assertThat(results.load.scan.computeDirs.size()).isEqualTo(0);
    assertThat(results.load.scan.deleteFiles.size()).isEqualTo(0);
    assertThat(results.load.scan.fileKeys.size()).isEqualTo(0);
    assertThat(results.load.invalidDirectories.size()).isEqualTo(0);
}
Also used : Path(java.nio.file.Path) FileStore(java.nio.file.FileStore) Digest(build.bazel.remote.execution.v2.Digest) ByteString(com.google.protobuf.ByteString) StartupCacheResults(build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults) Test(org.junit.Test)

Example 2 with StartupCacheResults

use of build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults in project bazel-buildfarm by bazelbuild.

the class CASFileCacheTest method startLoadsExistingBlob.

@Test
public void startLoadsExistingBlob() throws IOException, InterruptedException {
    FileStore fileStore = Files.getFileStore(root);
    ByteString blob = ByteString.copyFromUtf8("blob");
    Digest blobDigest = DIGEST_UTIL.compute(blob);
    Path path = fileCache.getPath(fileCache.getKey(blobDigest, false));
    Path execPath = fileCache.getPath(fileCache.getKey(blobDigest, true));
    Files.write(path, blob.toByteArray());
    EvenMoreFiles.setReadOnlyPerms(path, false, fileStore);
    Files.write(execPath, blob.toByteArray());
    EvenMoreFiles.setReadOnlyPerms(execPath, true, fileStore);
    StartupCacheResults results = fileCache.start(false);
    // check the startup results to ensure our two files were processed
    assertThat(results.load.loadSkipped).isFalse();
    assertThat(results.load.scan.computeDirs.size()).isEqualTo(0);
    assertThat(results.load.scan.deleteFiles.size()).isEqualTo(0);
    assertThat(results.load.scan.fileKeys.size()).isEqualTo(2);
    assertThat(results.load.invalidDirectories.size()).isEqualTo(0);
    // explicitly not providing blob via blobs, this would throw if fetched from factory
    // 
    // FIXME https://github.com/google/truth/issues/285 assertThat(Path) is ambiguous
    assertThat(fileCache.put(blobDigest, false).equals(path)).isTrue();
    assertThat(fileCache.put(blobDigest, true).equals(execPath)).isTrue();
}
Also used : Path(java.nio.file.Path) FileStore(java.nio.file.FileStore) Digest(build.bazel.remote.execution.v2.Digest) ByteString(com.google.protobuf.ByteString) StartupCacheResults(build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults) Test(org.junit.Test)

Example 3 with StartupCacheResults

use of build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults in project bazel-buildfarm by bazelbuild.

the class CASFileCacheTest method startCasAssumeDirectory.

@Test
public void startCasAssumeDirectory() throws IOException, InterruptedException {
    // create a "_dir" file on the root
    Path path = root.resolve("foobar_dir");
    ByteString blob = ByteString.copyFromUtf8("content");
    Files.write(path, blob.toByteArray());
    // start the CAS with a file whose name indicates its a directory
    // the cache should start and consider it a compute directory
    StartupCacheResults results = fileCache.start(false);
    // check the startup results to ensure no files were processed
    assertThat(results.load.loadSkipped).isFalse();
    assertThat(results.load.scan.computeDirs.size()).isEqualTo(0);
    assertThat(results.load.scan.deleteFiles.size()).isEqualTo(1);
    assertThat(results.load.scan.fileKeys.size()).isEqualTo(0);
    assertThat(results.load.invalidDirectories.size()).isEqualTo(0);
}
Also used : Path(java.nio.file.Path) ByteString(com.google.protobuf.ByteString) StartupCacheResults(build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults) Test(org.junit.Test)

Example 4 with StartupCacheResults

use of build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults in project bazel-buildfarm by bazelbuild.

the class CASFileCacheTest method startEmptyCas.

@Test
public void startEmptyCas() throws IOException, InterruptedException {
    // start the file cache with no files.
    // the cache should start without any initial files in the cache.
    StartupCacheResults results = fileCache.start(false);
    // check the startuo results to ensure no files were processed
    assertThat(results.load.loadSkipped).isFalse();
    assertThat(results.load.scan.computeDirs.size()).isEqualTo(0);
    assertThat(results.load.scan.deleteFiles.size()).isEqualTo(0);
    assertThat(results.load.scan.fileKeys.size()).isEqualTo(0);
    assertThat(results.load.invalidDirectories.size()).isEqualTo(0);
}
Also used : StartupCacheResults(build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults) Test(org.junit.Test)

Example 5 with StartupCacheResults

use of build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults in project bazel-buildfarm by bazelbuild.

the class CacheLoad method main.

/*
    When starting the CAS, ensure that the "max size" appropriately reflects the content size of the CAS's root.
    Otherwise, reaching the "max size" will result in files being deleted from the root.
    The appropriate size may not be obvious by observing actual disk usage (this especially true for zero filled test data)
    A closer calculation for ample "max size" could be calculated with "du -hs --apparent-size".
  */
public static void main(String[] args) throws Exception {
    Path root = Paths.get(args[0]);
    CASFileCache fileCache = new LocalCASFileCache(root, /* maxSizeInBytes=*/
    Size.gbToBytes(500), new DigestUtil(HashFunction.SHA1), /* expireService=*/
    newDirectExecutorService(), /* accessRecorder=*/
    directExecutor());
    // Start cache and measure startup time (reported internally).
    StartupCacheResults results = fileCache.start(newDirectExecutorService(), true);
    // Report information on started cache.
    System.out.println("CAS Started.");
    System.out.println("Start Time: " + results.startupTime.getSeconds() + "s");
    // Load Information
    System.out.println("Loaded Cache: " + !results.load.loadSkipped);
    // Entry Information
    System.out.println("Total Entry Count: " + fileCache.entryCount());
    System.out.println("Unreferenced Entry Count: " + fileCache.unreferencedEntryCount());
    // File Information
    System.out.println("Cache Root: " + results.cacheDirectory);
    System.out.println("Directory Count: " + fileCache.directoryStorageCount());
    System.out.println("Current Size: " + Size.bytesToGb(fileCache.size()) + "GB");
}
Also used : Path(java.nio.file.Path) CASFileCache(build.buildfarm.cas.cfc.CASFileCache) StartupCacheResults(build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults) DigestUtil(build.buildfarm.common.DigestUtil)

Aggregations

StartupCacheResults (build.buildfarm.cas.cfc.CASFileCache.StartupCacheResults)5 Path (java.nio.file.Path)4 Test (org.junit.Test)4 ByteString (com.google.protobuf.ByteString)3 Digest (build.bazel.remote.execution.v2.Digest)2 FileStore (java.nio.file.FileStore)2 CASFileCache (build.buildfarm.cas.cfc.CASFileCache)1 DigestUtil (build.buildfarm.common.DigestUtil)1