Avoid excess calls when many files are packed in a single block.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>
+ localLocator := map[string]string{}
for _, name := range names {
fn, ok := dn.inodes[name].(*filenode)
if !ok {
for _, name := range names {
fn, ok := dn.inodes[name].(*filenode)
if !ok {
for idx, seg := range fn.segments {
switch seg := seg.(type) {
case storedSegment:
for idx, seg := range fn.segments {
switch seg := seg.(type) {
case storedSegment:
- loc, err := dn.fs.LocalLocator(seg.locator)
- if err != nil {
- return err
+ loc, ok := localLocator[seg.locator]
+ if !ok {
+ var err error
+ loc, err = dn.fs.LocalLocator(seg.locator)
+ if err != nil {
+ return err
+ }
+ localLocator[seg.locator] = loc
}
seg.locator = loc
fn.segments[idx] = seg
}
seg.locator = loc
fn.segments[idx] = seg