add option to redirect moved or non-local volumes

fix https://github.com/chrislusf/seaweedfs/issues/168
This commit is contained in:
chrislusf
2015-08-03 14:43:15 -07:00
parent 320e946d50
commit 7d1e9a6b8a
4 changed files with 14 additions and 3 deletions

View File

@@ -22,6 +22,7 @@ type VolumeServer struct {
needleMapKind storage.NeedleMapType
FixJpgOrientation bool
ReadRedirect bool
}
func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string,
@@ -31,13 +32,15 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string,
masterNode string, pulseSeconds int,
dataCenter string, rack string,
whiteList []string,
fixJpgOrientation bool) *VolumeServer {
fixJpgOrientation bool,
readRedirect bool) *VolumeServer {
vs := &VolumeServer{
pulseSeconds: pulseSeconds,
dataCenter: dataCenter,
rack: rack,
needleMapKind: needleMapKind,
FixJpgOrientation: fixJpgOrientation,
ReadRedirect: readRedirect,
}
vs.SetMasterNode(masterNode)
vs.store = storage.NewStore(port, ip, publicUrl, folders, maxCounts, vs.needleMapKind)

View File

@@ -36,6 +36,11 @@ func (vs *VolumeServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request)
glog.V(4).Infoln("volume", volumeId, "reading", n)
if !vs.store.HasVolume(volumeId) {
if !vs.ReadRedirect {
glog.V(2).Infoln("volume is not local:", err, r.URL.Path)
w.WriteHeader(http.StatusNotFound)
return
}
lookupResult, err := operation.Lookup(vs.GetMasterNode(), volumeId.String())
glog.V(2).Infoln("volume", volumeId, "found on", lookupResult, "error", err)
if err == nil && len(lookupResult.Locations) > 0 {