Browse Source

fix ScanDirtyData bug

pull/283/head
tnextday 10 years ago
parent
commit
8454b05319
  1. 4
      go/storage/volume_replicate.go
  2. 17
      go/weed/weed_server/volume_server_handlers_replicate.go

4
go/storage/volume_replicate.go

@ -51,7 +51,7 @@ func ScanDirtyData(indexFileContent []byte) (dirtys DirtyDatas) {
if int64(nv.Size)-NeedleHeaderSize > 0 { if int64(nv.Size)-NeedleHeaderSize > 0 {
dirtys = append(dirtys, DirtyData{ dirtys = append(dirtys, DirtyData{
Offset: int64(nv.Offset)*8 + NeedleHeaderSize, Offset: int64(nv.Offset)*8 + NeedleHeaderSize,
Size: nv.Size - NeedleHeaderSize,
Size: nv.Size,
}) })
} }
} }
@ -193,7 +193,7 @@ func (v *Volume) GetVolumeCleanReader() (cr *CleanReader, err error) {
} else { } else {
dirtys = ScanDirtyData(indexData) dirtys = ScanDirtyData(indexData)
} }
dataFile, e := os.Open(v.FileName())
dataFile, e := os.Open(v.FileName()+".dat")
if e != nil { if e != nil {
return nil, e return nil, e

17
go/weed/weed_server/volume_server_handlers_replicate.go

@ -10,23 +10,24 @@ import (
) )
func (vs *VolumeServer) getVolumeCleanDataHandler(w http.ResponseWriter, r *http.Request) { func (vs *VolumeServer) getVolumeCleanDataHandler(w http.ResponseWriter, r *http.Request) {
v, err := vs.getVolume("volume", r)
v, e := vs.getVolume("volume", r)
if v == nil { if v == nil {
http.Error(w, fmt.Sprintf("Not Found volume: %v", err), http.StatusBadRequest)
http.Error(w, fmt.Sprintf("Not Found volume: %v", e), http.StatusBadRequest)
return return
} }
cr, e := v.GetVolumeCleanReader() cr, e := v.GetVolumeCleanReader()
if e != nil { if e != nil {
http.Error(w, fmt.Sprintf("Get volume clean reader: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("Get volume clean reader: %v", e), http.StatusInternalServerError)
return return
} }
totalSize, e := cr.Size() totalSize, e := cr.Size()
if e != nil { if e != nil {
http.Error(w, fmt.Sprintf("Get volume size: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("Get volume size: %v", e), http.StatusInternalServerError)
return return
} }
w.Header().Set("Accept-Ranges", "bytes") w.Header().Set("Accept-Ranges", "bytes")
w.Header().Set("Content-Encoding", "lz4") w.Header().Set("Content-Encoding", "lz4")
w.Header().Set("Content-Disposition", fmt.Sprintf(`filename="%d.dat.lz4"`, v.Id))
lz4w := lz4.NewWriter(w) lz4w := lz4.NewWriter(w)
defer lz4w.Close() defer lz4w.Close()
rangeReq := r.Header.Get("Range") rangeReq := r.Header.Get("Range")
@ -37,9 +38,9 @@ func (vs *VolumeServer) getVolumeCleanDataHandler(w http.ResponseWriter, r *http
} }
return return
} }
ranges, err := parseRange(rangeReq, totalSize)
if err != nil {
http.Error(w, err.Error(), http.StatusRequestedRangeNotSatisfiable)
ranges, e := parseRange(rangeReq, totalSize)
if e != nil {
http.Error(w, e.Error(), http.StatusRequestedRangeNotSatisfiable)
return return
} }
if len(ranges) != 1 { if len(ranges) != 1 {
@ -48,7 +49,7 @@ func (vs *VolumeServer) getVolumeCleanDataHandler(w http.ResponseWriter, r *http
} }
ra := ranges[0] ra := ranges[0]
if _, e := cr.Seek(ra.start, 0); e != nil { if _, e := cr.Seek(ra.start, 0); e != nil {
http.Error(w, fmt.Sprintf("Seek: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("Seek: %v", e), http.StatusInternalServerError)
return return
} }
w.Header().Set("Content-Length", strconv.FormatInt(ra.length, 10)) w.Header().Set("Content-Length", strconv.FormatInt(ra.length, 10))

Loading…
Cancel
Save