2960: Use getLocatorInfo to get block size in blockReadRemote.
authorTom Clegg <tom@curii.com>
Thu, 22 Feb 2024 16:25:39 +0000 (11:25 -0500)
committerTom Clegg <tom@curii.com>
Thu, 22 Feb 2024 16:25:39 +0000 (11:25 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keepstore/keepstore.go

index b29c8817690b548c4188b003c76a56a2ca876d35..60d062e1e3467b113a137126296f983f969a9f01 100644 (file)
@@ -322,7 +322,10 @@ func (ks *keepstore) blockReadRemote(ctx context.Context, opts arvados.BlockRead
        }
        var remoteClient *keepclient.KeepClient
        var parts []string
-       var size int
+       li, err := getLocatorInfo(opts.Locator)
+       if err != nil {
+               return 0, err
+       }
        for i, part := range strings.Split(opts.Locator, "+") {
                switch {
                case i == 0:
@@ -344,8 +347,6 @@ func (ks *keepstore) blockReadRemote(ctx context.Context, opts arvados.BlockRead
                        }
                        remoteClient = kc
                        part = "A" + part[7:]
-               case len(part) > 0 && part[0] >= '0' && part[0] <= '9':
-                       size, _ = strconv.Atoi(part)
                }
                parts = append(parts, part)
        }
@@ -356,8 +357,8 @@ func (ks *keepstore) blockReadRemote(ctx context.Context, opts arvados.BlockRead
        if opts.LocalLocator == nil {
                // Read from remote cluster and stream response back
                // to caller
-               if rw, ok := opts.WriteTo.(http.ResponseWriter); ok && size > 0 {
-                       rw.Header().Set("Content-Length", fmt.Sprintf("%d", size))
+               if rw, ok := opts.WriteTo.(http.ResponseWriter); ok && li.size > 0 {
+                       rw.Header().Set("Content-Length", fmt.Sprintf("%d", li.size))
                }
                return remoteClient.BlockRead(ctx, arvados.BlockReadOptions{
                        Locator: locator,