aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2024-04-11 23:44:18 -0700
committerchrislu <chris.lu@gmail.com>2024-04-11 23:44:54 -0700
commitd5b2cee34a9555507b59e59824394d707ecbfa3f (patch)
treeaae29d928c26deac1b33407d03a23573b171c8af
parent1410c062f8b4ac450a72dbe59ff1867d4c93849a (diff)
downloadseaweedfs-d5b2cee34a9555507b59e59824394d707ecbfa3f.tar.xz
seaweedfs-d5b2cee34a9555507b59e59824394d707ecbfa3f.zip
log possible racing condition
fix https://github.com/seaweedfs/seaweedfs/issues/5412
-rw-r--r--weed/mount/page_writer/page_chunk_mem.go8
-rw-r--r--weed/mount/page_writer/page_chunk_swapfile.go16
2 files changed, 12 insertions, 12 deletions
diff --git a/weed/mount/page_writer/page_chunk_mem.go b/weed/mount/page_writer/page_chunk_mem.go
index 70814262d..ddb192b9b 100644
--- a/weed/mount/page_writer/page_chunk_mem.go
+++ b/weed/mount/page_writer/page_chunk_mem.go
@@ -63,11 +63,11 @@ func (mc *MemChunk) ReadDataAt(p []byte, off int64, tsNs int64) (maxStop int64)
logicStart := max(off, memChunkBaseOffset+t.StartOffset)
logicStop := min(off+int64(len(p)), memChunkBaseOffset+t.stopOffset)
if logicStart < logicStop {
+ copy(p[logicStart-off:logicStop-off], mc.buf[logicStart-memChunkBaseOffset:logicStop-memChunkBaseOffset])
+ maxStop = max(maxStop, logicStop)
+
if t.TsNs >= tsNs {
- copy(p[logicStart-off:logicStop-off], mc.buf[logicStart-memChunkBaseOffset:logicStop-memChunkBaseOffset])
- maxStop = max(maxStop, logicStop)
- } else {
- println("read old data1", tsNs-t.TsNs, "ns")
+ println("read new data1", t.TsNs - tsNs, "ns")
}
}
}
diff --git a/weed/mount/page_writer/page_chunk_swapfile.go b/weed/mount/page_writer/page_chunk_swapfile.go
index a1d9c04fa..35e9ee682 100644
--- a/weed/mount/page_writer/page_chunk_swapfile.go
+++ b/weed/mount/page_writer/page_chunk_swapfile.go
@@ -129,15 +129,15 @@ func (sc *SwapFileChunk) ReadDataAt(p []byte, off int64, tsNs int64) (maxStop in
logicStart := max(off, chunkStartOffset+t.StartOffset)
logicStop := min(off+int64(len(p)), chunkStartOffset+t.stopOffset)
if logicStart < logicStop {
+ actualStart := logicStart - chunkStartOffset + int64(sc.actualChunkIndex)*sc.swapfile.chunkSize
+ if _, err := sc.swapfile.file.ReadAt(p[logicStart-off:logicStop-off], actualStart); err != nil {
+ glog.Errorf("failed to reading swap file %s: %v", sc.swapfile.file.Name(), err)
+ break
+ }
+ maxStop = max(maxStop, logicStop)
+
if t.TsNs >= tsNs {
- actualStart := logicStart - chunkStartOffset + int64(sc.actualChunkIndex)*sc.swapfile.chunkSize
- if _, err := sc.swapfile.file.ReadAt(p[logicStart-off:logicStop-off], actualStart); err != nil {
- glog.Errorf("failed to reading swap file %s: %v", sc.swapfile.file.Name(), err)
- break
- }
- maxStop = max(maxStop, logicStop)
- } else {
- println("read old data2", tsNs-t.TsNs, "ns")
+ println("read new data2", t.TsNs - tsNs, "ns")
}
}
}