Browse Source

address comments

pull/7411/head
chrislu 1 month ago
parent
commit
d1428df1df
  1. 2
      weed/server/filer_grpc_server.go
  2. 17
      weed/wdclient/masterclient.go

2
weed/server/filer_grpc_server.go

@ -109,7 +109,7 @@ func (fs *FilerServer) LookupVolume(ctx context.Context, req *filer_pb.LookupVol
} }
func wdclientLocationsToPb(locations []wdclient.Location) []*filer_pb.Location { func wdclientLocationsToPb(locations []wdclient.Location) []*filer_pb.Location {
var locs []*filer_pb.Location
locs := make([]*filer_pb.Location, 0, len(locations))
for _, loc := range locations { for _, loc := range locations {
locs = append(locs, &filer_pb.Location{ locs = append(locs, &filer_pb.Location{
Url: loc.Url, Url: loc.Url,

17
weed/wdclient/masterclient.go

@ -114,12 +114,15 @@ func (mc *MasterClient) LookupVolumeIdsWithFallback(ctx context.Context, volumeI
var needsLookup []string var needsLookup []string
var lookupErrors []error var lookupErrors []error
// Check cache first and separate volumes that need lookup
// Check cache first and parse volume IDs once
vidStringToUint := make(map[string]uint32, len(volumeIds))
for _, vidString := range volumeIds { for _, vidString := range volumeIds {
vid, err := strconv.ParseUint(vidString, 10, 32) vid, err := strconv.ParseUint(vidString, 10, 32)
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid volume id %s: %v", vidString, err) return nil, fmt.Errorf("invalid volume id %s: %v", vidString, err)
} }
vidStringToUint[vidString] = uint32(vid)
locations, found := mc.GetLocations(uint32(vid)) locations, found := mc.GetLocations(uint32(vid))
if found && len(locations) > 0 { if found && len(locations) > 0 {
result[vidString] = locations result[vidString] = locations
@ -143,8 +146,8 @@ func (mc *MasterClient) LookupVolumeIdsWithFallback(ctx context.Context, volumeI
batchResult := make(map[string][]Location) batchResult := make(map[string][]Location)
for _, vidString := range needsLookup { for _, vidString := range needsLookup {
vid, _ := strconv.ParseUint(vidString, 10, 32)
if locations, found := mc.GetLocations(uint32(vid)); found && len(locations) > 0 {
vid := vidStringToUint[vidString] // Use pre-parsed value
if locations, found := mc.GetLocations(vid); found && len(locations) > 0 {
batchResult[vidString] = locations batchResult[vidString] = locations
} else { } else {
stillNeedLookup = append(stillNeedLookup, vidString) stillNeedLookup = append(stillNeedLookup, vidString)
@ -224,9 +227,13 @@ func (mc *MasterClient) LookupVolumeIdsWithFallback(ctx context.Context, volumeI
} }
} }
// Return aggregated errors
// Return aggregated errors with clear formatting
if len(lookupErrors) > 0 { if len(lookupErrors) > 0 {
return result, fmt.Errorf("lookup errors: %v", lookupErrors)
errorMessages := make([]string, 0, len(lookupErrors))
for _, err := range lookupErrors {
errorMessages = append(errorMessages, err.Error())
}
return result, fmt.Errorf("lookup errors: %s", strings.Join(errorMessages, "; "))
} }
return result, nil return result, nil

Loading…
Cancel
Save