Browse Source

Use fallback if urls are not found

pull/3318/head
Konstantin Lebedev 2 years ago
parent
commit
01996bccf8
  1. 6
      weed/filer/stream.go
  2. 6
      weed/wdclient/masterclient.go

6
weed/filer/stream.go

@ -69,14 +69,14 @@ func StreamContent(masterClient wdclient.HasLookupFileIdFunction, writer io.Writ
fileId2Url := make(map[string][]string) fileId2Url := make(map[string][]string)
for _, chunkView := range chunkViews { for _, chunkView := range chunkViews {
urlStrings, err := masterClient.GetLookupFileIdFunction()(chunkView.FileId) urlStrings, err := masterClient.GetLookupFileIdFunction()(chunkView.FileId)
if err != nil { if err != nil {
glog.V(1).Infof("operation LookupFileId %s failed, err: %v", chunkView.FileId, err) glog.V(1).Infof("operation LookupFileId %s failed, err: %v", chunkView.FileId, err)
return err return err
} else if len(urlStrings) == 0 { } else if len(urlStrings) == 0 {
glog.Errorf("operation LookupFileId %s failed, err: urls not found", chunkView.FileId)
return fmt.Errorf("operation LookupFileId %s failed, err: urls not found", chunkView.FileId)
errUrlNotFound := fmt.Errorf("operation LookupFileId %s failed, err: urls not found", chunkView.FileId)
glog.Error(errUrlNotFound)
return errUrlNotFound
} }
fileId2Url[chunkView.FileId] = urlStrings fileId2Url[chunkView.FileId] = urlStrings
} }

6
weed/wdclient/masterclient.go

@ -2,6 +2,7 @@ package wdclient
import ( import (
"context" "context"
"fmt"
"github.com/chrislusf/seaweedfs/weed/stats" "github.com/chrislusf/seaweedfs/weed/stats"
"math/rand" "math/rand"
"time" "time"
@ -44,7 +45,7 @@ func (mc *MasterClient) GetLookupFileIdFunction() LookupFileIdFunctionType {
func (mc *MasterClient) LookupFileIdWithFallback(fileId string) (fullUrls []string, err error) { func (mc *MasterClient) LookupFileIdWithFallback(fileId string) (fullUrls []string, err error) {
fullUrls, err = mc.vidMap.LookupFileId(fileId) fullUrls, err = mc.vidMap.LookupFileId(fileId)
if err == nil {
if err == nil && len(fullUrls) > 0 {
return return
} }
err = pb.WithMasterClient(false, mc.currentMaster, mc.grpcDialOption, func(client master_pb.SeaweedClient) error { err = pb.WithMasterClient(false, mc.currentMaster, mc.grpcDialOption, func(client master_pb.SeaweedClient) error {
@ -52,7 +53,7 @@ func (mc *MasterClient) LookupFileIdWithFallback(fileId string) (fullUrls []stri
VolumeOrFileIds: []string{fileId}, VolumeOrFileIds: []string{fileId},
}) })
if err != nil { if err != nil {
return err
return fmt.Errorf("LookupVolume failed: %v", err)
} }
for vid, vidLocation := range resp.VolumeIdLocations { for vid, vidLocation := range resp.VolumeIdLocations {
for _, vidLoc := range vidLocation.Locations { for _, vidLoc := range vidLocation.Locations {
@ -65,7 +66,6 @@ func (mc *MasterClient) LookupFileIdWithFallback(fileId string) (fullUrls []stri
fullUrls = append(fullUrls, "http://"+loc.Url+"/"+fileId) fullUrls = append(fullUrls, "http://"+loc.Url+"/"+fileId)
} }
} }
return nil return nil
}) })
return return

Loading…
Cancel
Save