|
@ -1,6 +1,7 @@ |
|
|
package page_writer |
|
|
package page_writer |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
|
|
|
"github.com/chrislusf/seaweedfs/weed/glog" |
|
|
"github.com/chrislusf/seaweedfs/weed/util" |
|
|
"github.com/chrislusf/seaweedfs/weed/util" |
|
|
"github.com/chrislusf/seaweedfs/weed/util/mem" |
|
|
"github.com/chrislusf/seaweedfs/weed/util/mem" |
|
|
"io" |
|
|
"io" |
|
@ -80,6 +81,18 @@ func (cw *ChunkedStreamWriter) ReadDataAt(p []byte, off int64) (maxStop int64) { |
|
|
if logicStart < logicStop { |
|
|
if logicStart < logicStop { |
|
|
copy(p[logicStart-off:logicStop-off], memChunk.buf[logicStart-memChunkBaseOffset:logicStop-memChunkBaseOffset]) |
|
|
copy(p[logicStart-off:logicStop-off], memChunk.buf[logicStart-memChunkBaseOffset:logicStop-memChunkBaseOffset]) |
|
|
maxStop = max(maxStop, logicStop) |
|
|
maxStop = max(maxStop, logicStop) |
|
|
|
|
|
|
|
|
|
|
|
isAllZero := true |
|
|
|
|
|
for i := logicStart - off; i < logicStop-off; i++ { |
|
|
|
|
|
if p[i] != 0 { |
|
|
|
|
|
isAllZero = false |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if isAllZero { |
|
|
|
|
|
glog.Errorf("Copied content is all Zero [%d,%d)", logicStart-off, logicStop-off) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return |
|
|
return |
|
@ -111,6 +124,9 @@ func (cw *ChunkedStreamWriter) saveOneChunk(memChunk *MemChunk, logicChunkIndex |
|
|
|
|
|
|
|
|
// Destroy releases used resources
|
|
|
// Destroy releases used resources
|
|
|
func (cw *ChunkedStreamWriter) Destroy() { |
|
|
func (cw *ChunkedStreamWriter) Destroy() { |
|
|
|
|
|
cw.Lock() |
|
|
|
|
|
defer cw.Unlock() |
|
|
|
|
|
|
|
|
for t, memChunk := range cw.activeChunks { |
|
|
for t, memChunk := range cw.activeChunks { |
|
|
mem.Free(memChunk.buf) |
|
|
mem.Free(memChunk.buf) |
|
|
delete(cw.activeChunks, t) |
|
|
delete(cw.activeChunks, t) |
|
|