20318: Fix DiskCacheSize not propagated by (*KeepClient)Clone().
[arvados.git] / sdk / go / keepclient / support.go
index 633ec1896858bd484d6740b8e9dea074c12d82c9..6acaf64baa34caa265eb10bafcbf36a70d308d9b 100644 (file)
@@ -127,7 +127,7 @@ func (kc *KeepClient) uploadToKeepServer(host string, hash string, classesTodo [
        }
 }
 
-func (kc *KeepClient) BlockWrite(ctx context.Context, req arvados.BlockWriteOptions) (arvados.BlockWriteResponse, error) {
+func (kc *KeepClient) httpBlockWrite(ctx context.Context, req arvados.BlockWriteOptions) (arvados.BlockWriteResponse, error) {
        var resp arvados.BlockWriteResponse
        var getReader func() io.Reader
        if req.Data == nil && req.Reader == nil {
@@ -149,8 +149,12 @@ func (kc *KeepClient) BlockWrite(ctx context.Context, req arvados.BlockWriteOpti
                getReader = func() io.Reader { return bytes.NewReader(req.Data[:req.DataSize]) }
        } else {
                buf := asyncbuf.NewBuffer(make([]byte, 0, req.DataSize))
+               reader := req.Reader
+               if req.Hash != "" {
+                       reader = HashCheckingReader{req.Reader, md5.New(), req.Hash}
+               }
                go func() {
-                       _, err := io.Copy(buf, HashCheckingReader{req.Reader, md5.New(), req.Hash})
+                       _, err := io.Copy(buf, reader)
                        buf.CloseWithError(err)
                }()
                getReader = buf.NewReader
@@ -164,7 +168,11 @@ func (kc *KeepClient) BlockWrite(ctx context.Context, req arvados.BlockWriteOpti
                req.Hash = fmt.Sprintf("%x", m.Sum(nil))
        }
        if req.StorageClasses == nil {
-               req.StorageClasses = kc.StorageClasses
+               if len(kc.StorageClasses) > 0 {
+                       req.StorageClasses = kc.StorageClasses
+               } else {
+                       req.StorageClasses = kc.DefaultStorageClasses
+               }
        }
        if req.Replicas == 0 {
                req.Replicas = kc.Want_replicas