12447: Add ClearBlockCache method to KeepClient
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 13 Oct 2017 13:50:30 +0000 (09:50 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 13 Oct 2017 13:50:30 +0000 (09:50 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

sdk/go/keepclient/block_cache.go
sdk/go/keepclient/keepclient.go
services/crunch-run/crunchrun.go
services/crunch-run/crunchrun_test.go

index 18f7de99e5f90855c13526c92eebc6c52743fa34..23fd331d1f1282446e3d9dda3881916ec80c3cb0 100644 (file)
@@ -30,7 +30,7 @@ const defaultMaxBlocks = 4
 // there are no more than MaxBlocks left.
 func (c *BlockCache) Sweep() {
        max := c.MaxBlocks
-       if max < defaultMaxBlocks {
+       if max == 0 {
                max = defaultMaxBlocks
        }
        c.mtx.Lock()
index 8b518ac8d51a2858980441ac0a2c81993bbc9436..bc7aa246c6251607861cf9a5a0cc58414feedda6 100644 (file)
@@ -434,6 +434,10 @@ func (kc *KeepClient) cache() *BlockCache {
        }
 }
 
+func (kc *KeepClient) ClearBlockCache() {
+       kc.cache().Clear()
+}
+
 var (
        // There are four global http.Client objects for the four
        // possible permutations of TLS behavior (verify/skip-verify)
index 6d4b06b18bfdd10b3faf6e2dcfb6822bf508bea1..8d437a8f20bbe98747eb45d13bee7c83219e4248 100644 (file)
@@ -55,6 +55,7 @@ var ErrCancelled = errors.New("Cancelled")
 type IKeepClient interface {
        PutHB(hash string, buf []byte) (string, int, error)
        ManifestFileReader(m manifest.Manifest, filename string) (arvados.File, error)
+       ClearBlockCache()
 }
 
 // NewLogWriter is a factory function to create a new log writer.
@@ -265,7 +266,7 @@ func (runner *ContainerRunner) LoadImage() (err error) {
 
        runner.ContainerConfig.Image = imageID
 
-       keepclient.DefaultBlockCache.Clear()
+       runner.Kc.ClearBlockCache()
 
        return nil
 }
@@ -1452,6 +1453,7 @@ func main() {
        if err != nil {
                log.Fatalf("%s: %v", containerId, err)
        }
+       kc.BlockCache = &keepclient.BlockCache{MaxBlocks: 2}
        kc.Retries = 4
 
        var docker *dockerclient.Client
index 474ba5d7db7b85de773443736f39dd6914bc94d2..5e77d7bd7bcd41fb19c80ede9b450a542cbe0635 100644 (file)
@@ -312,6 +312,9 @@ func (client *KeepTestClient) PutHB(hash string, buf []byte) (string, int, error
        return fmt.Sprintf("%s+%d", hash, len(buf)), len(buf), nil
 }
 
+func (*KeepTestClient) ClearBlockCache() {
+}
+
 type FileWrapper struct {
        io.ReadCloser
        len int64
@@ -417,12 +420,18 @@ func (KeepErrorTestClient) ManifestFileReader(m manifest.Manifest, filename stri
        return nil, errors.New("KeepError")
 }
 
+func (KeepErrorTestClient) ClearBlockCache() {
+}
+
 type KeepReadErrorTestClient struct{}
 
 func (KeepReadErrorTestClient) PutHB(hash string, buf []byte) (string, int, error) {
        return "", 0, nil
 }
 
+func (KeepReadErrorTestClient) ClearBlockCache() {
+}
+
 type ErrorReader struct{}
 
 func (ErrorReader) Read(p []byte) (n int, err error) {