diff --git a/go/operation/lookup_volume_id.go b/go/operation/lookup_volume_id.go index 2e488353b..7e4f5dd08 100644 --- a/go/operation/lookup_volume_id.go +++ b/go/operation/lookup_volume_id.go @@ -11,12 +11,13 @@ import ( ) type Location struct { - Url string `json:"url"` - PublicUrl string `json:"publicUrl"` + Url string `json:"url,omitempty"` + PublicUrl string `json:"publicUrl,omitempty"` } type LookupResult struct { - Locations []Location `json:"locations"` - Error string `json:"error"` + VolumeId string `json:"volumeId,omitempty"` + Locations []Location `json:"locations,omitempty"` + Error string `json:"error,omitempty"` } func Lookup(server string, vid string) (*LookupResult, error) { @@ -51,3 +52,20 @@ func LookupFileId(server string, fileId string) (fullUrl string, err error) { } return "http://" + lookup.Locations[rand.Intn(len(lookup.Locations))].PublicUrl + "/" + fileId, nil } + +func LookupVolumeIds(server string, vids []string) ([]LookupResult, error) { + values := make(url.Values) + for _, vid := range vids { + values.Add("volumeId", vid) + } + jsonBlob, err := util.Post("http://"+server+"/vol/lookup", values) + if err != nil { + return nil, err + } + var ret []LookupResult + err = json.Unmarshal(jsonBlob, &ret) + if err != nil { + return nil, err + } + return ret, nil +} diff --git a/go/weed/weed_server/master_server_handlers.go b/go/weed/weed_server/master_server_handlers.go index b1705560b..f1ceeedcb 100644 --- a/go/weed/weed_server/master_server_handlers.go +++ b/go/weed/weed_server/master_server_handlers.go @@ -1,6 +1,7 @@ package weed_server import ( + "code.google.com/p/weed-fs/go/operation" "code.google.com/p/weed-fs/go/stats" "code.google.com/p/weed-fs/go/storage" "code.google.com/p/weed-fs/go/topology" @@ -12,18 +13,8 @@ import ( "strings" ) -type LookupResultLocation struct { - Url string `json:"url,omitempty"` - PublicUrl string `json:"publicUrl,omitempty"` -} -type LookupResult struct { - VolumeId string `json:"volumeId,omitempty"` - Locations []LookupResultLocation `json:"locations,omitempty"` - Error string `json:"error,omitempty"` -} - -func (ms *MasterServer) lookupVolumeId(vids []string, collection string) (volumeLocations map[string]LookupResult) { - volumeLocations = make(map[string]LookupResult) +func (ms *MasterServer) lookupVolumeId(vids []string, collection string) (volumeLocations map[string]operation.LookupResult) { + volumeLocations = make(map[string]operation.LookupResult) for _, vid := range vids { commaSep := strings.Index(vid, ",") if commaSep > 0 { @@ -36,16 +27,16 @@ func (ms *MasterServer) lookupVolumeId(vids []string, collection string) (volume if err == nil { machines := ms.Topo.Lookup(collection, volumeId) if machines != nil { - var ret []LookupResultLocation + var ret []operation.Location for _, dn := range machines { - ret = append(ret, LookupResultLocation{Url: dn.Url(), PublicUrl: dn.PublicUrl}) + ret = append(ret, operation.Location{Url: dn.Url(), PublicUrl: dn.PublicUrl}) } - volumeLocations[vid] = LookupResult{VolumeId: vid, Locations: ret} + volumeLocations[vid] = operation.LookupResult{VolumeId: vid, Locations: ret} } else { - volumeLocations[vid] = LookupResult{VolumeId: vid, Error: "volumeId not found."} + volumeLocations[vid] = operation.LookupResult{VolumeId: vid, Error: "volumeId not found."} } } else { - volumeLocations[vid] = LookupResult{VolumeId: vid, Error: "Unknown volumeId format."} + volumeLocations[vid] = operation.LookupResult{VolumeId: vid, Error: "Unknown volumeId format."} } } return @@ -74,7 +65,7 @@ func (ms *MasterServer) volumeLookupHandler(w http.ResponseWriter, r *http.Reque vids := r.Form["volumeId"] collection := r.FormValue("collection") //optional, but can be faster if too many collections volumeLocations := ms.lookupVolumeId(vids, collection) - var ret []LookupResult + var ret []operation.LookupResult for _, volumeLocation := range volumeLocations { ret = append(ret, volumeLocation) }