diff options
Diffstat (limited to 'go/operation/lookup.go')
| -rw-r--r-- | go/operation/lookup.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/go/operation/lookup.go b/go/operation/lookup.go new file mode 100644 index 000000000..7e4f5dd08 --- /dev/null +++ b/go/operation/lookup.go @@ -0,0 +1,71 @@ +package operation + +import ( + "code.google.com/p/weed-fs/go/util" + "encoding/json" + "errors" + _ "fmt" + "math/rand" + "net/url" + "strings" +) + +type Location struct { + Url string `json:"url,omitempty"` + PublicUrl string `json:"publicUrl,omitempty"` +} +type LookupResult struct { + VolumeId string `json:"volumeId,omitempty"` + Locations []Location `json:"locations,omitempty"` + Error string `json:"error,omitempty"` +} + +func Lookup(server string, vid string) (*LookupResult, error) { + values := make(url.Values) + values.Add("volumeId", vid) + jsonBlob, err := util.Post("http://"+server+"/dir/lookup", values) + if err != nil { + return nil, err + } + var ret LookupResult + err = json.Unmarshal(jsonBlob, &ret) + if err != nil { + return nil, err + } + if ret.Error != "" { + return nil, errors.New(ret.Error) + } + return &ret, nil +} + +func LookupFileId(server string, fileId string) (fullUrl string, err error) { + parts := strings.Split(fileId, ",") + if len(parts) != 2 { + return "", errors.New("Invalid fileId " + fileId) + } + lookup, lookupError := Lookup(server, parts[0]) + if lookupError != nil { + return "", lookupError + } + if len(lookup.Locations) == 0 { + return "", errors.New("File Not Found") + } + 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 +} |
