diff options
| author | chrislu <chris.lu@gmail.com> | 2021-12-23 17:17:32 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2021-12-23 17:17:32 -0800 |
| commit | 032df784ede380065edd6d6518d7a969a988db37 (patch) | |
| tree | cd1690f91724acaa7c11f430f742840c4351d1a0 /weed/filesys/page_writer.go | |
| parent | c2aad1c7ff4f210a1c773691c21e9fdad6b468e1 (diff) | |
| download | seaweedfs-032df784ede380065edd6d6518d7a969a988db37.tar.xz seaweedfs-032df784ede380065edd6d6518d7a969a988db37.zip | |
chunked file works now
Diffstat (limited to 'weed/filesys/page_writer.go')
| -rw-r--r-- | weed/filesys/page_writer.go | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/weed/filesys/page_writer.go b/weed/filesys/page_writer.go index 9c9e38968..8e52f9f67 100644 --- a/weed/filesys/page_writer.go +++ b/weed/filesys/page_writer.go @@ -24,7 +24,7 @@ func newPageWriter(file *File, chunkSize int64) *PageWriter { pw := &PageWriter{ f: file, chunkSize: chunkSize, - randomWriter: newTempFileDirtyPages(file), + randomWriter: newTempFileDirtyPages(file, chunkSize), streamWriter: newContinuousDirtyPages(file), writerPattern: NewWriterPattern(file.Name, chunkSize), } @@ -63,11 +63,23 @@ func (pw *PageWriter) FlushData() error { return pw.randomWriter.FlushData() } -func (pw *PageWriter) ReadDirtyDataAt(data []byte, startOffset int64) (maxStop int64) { - glog.V(4).Infof("ReadDirtyDataAt %v [%d, %d)", pw.f.fullpath(), startOffset, startOffset+int64(len(data))) - m1 := pw.streamWriter.ReadDirtyDataAt(data, startOffset) - m2 := pw.randomWriter.ReadDirtyDataAt(data, startOffset) - return max(m1, m2) +func (pw *PageWriter) ReadDirtyDataAt(data []byte, offset int64) (maxStop int64) { + glog.V(4).Infof("ReadDirtyDataAt %v [%d, %d)", pw.f.fullpath(), offset, offset+int64(len(data))) + + chunkIndex := offset / pw.chunkSize + for i := chunkIndex; len(data) > 0; i++ { + readSize := min(int64(len(data)), (i+1)*pw.chunkSize-offset) + + m1 := pw.streamWriter.ReadDirtyDataAt(data[:readSize], offset) + m2 := pw.randomWriter.ReadDirtyDataAt(data[:readSize], offset) + + maxStop = max(maxStop, max(m1, m2)) + + offset += readSize + data = data[readSize:] + } + + return } func (pw *PageWriter) GetStorageOptions() (collection, replication string) { @@ -76,3 +88,7 @@ func (pw *PageWriter) GetStorageOptions() (collection, replication string) { } return pw.randomWriter.GetStorageOptions() } + +func (pw *PageWriter) Destroy() { + pw.randomWriter.Destroy() +} |
