10684: Add Arvados-specific search path to Go SDK TLSClientConfig.
[arvados.git] / sdk / go / keepclient / collectionreader.go
index 68ecc6e43083d628fda84b00fbfeaf7fbfc9fe6b..33bb58710e0c94e1cfa562b8bd1c56afff62a4d7 100644 (file)
@@ -40,6 +40,10 @@ func (kc *KeepClient) CollectionFileReader(collection map[string]interface{}, fi
                return nil, ErrNoManifest
        }
        m := manifest.Manifest{Text: mText}
+       return kc.ManifestFileReader(m, filename)
+}
+
+func (kc *KeepClient) ManifestFileReader(m manifest.Manifest, filename string) (ReadCloserWithLen, error) {
        rdrChan := make(chan *cfReader)
        go kc.queueSegmentsToGet(m, filename, rdrChan)
        r, ok := <-rdrChan
@@ -205,12 +209,16 @@ GET:
                }
                var buf = make([]byte, fs.Offset+fs.Len)
                _, err = io.ReadFull(rdr, buf)
+               errClosing := rdr.Close()
+               if err == nil {
+                       err = errClosing
+               }
                if err != nil {
                        r.err = err
                        close(r.errNotNil)
                        return
                }
-               for bOff, bLen := fs.Offset, dataSliceSize; bOff <= fs.Offset+fs.Len && bLen > 0; bOff += bLen {
+               for bOff, bLen := fs.Offset, dataSliceSize; bOff < fs.Offset+fs.Len && bLen > 0; bOff += bLen {
                        if bOff+bLen > fs.Offset+fs.Len {
                                bLen = fs.Offset + fs.Len - bOff
                        }
@@ -235,7 +243,7 @@ GET:
        // In case we exited the above loop early: before returning,
        // drain the toGet channel so its sender doesn't sit around
        // blocking forever.
-       for _ = range r.toGet {
+       for range r.toGet {
        }
 }