diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2025-12-09 13:17:18 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-09 13:17:18 -0800 |
| commit | 0ede657a34fecce377d126decc71252c582003ca (patch) | |
| tree | d44b5e656b559e859f362429723389ece64fb4b4 | |
| parent | 5c2752250745fb4c2a7a288dee8c04b8b02ecdb1 (diff) | |
| download | seaweedfs-0ede657a34fecce377d126decc71252c582003ca.tar.xz seaweedfs-0ede657a34fecce377d126decc71252c582003ca.zip | |
fix: return error on size mismatch in ReadNeedleMeta for consistency (#7687)
* fix: return error on size mismatch in ReadNeedleMeta for consistency
When ReadNeedleMeta encounters a size mismatch at offset >= MaxPossibleVolumeSize,
it previously just continued without returning an error, potentially using wrong data.
This fix makes ReadNeedleMeta consistent with ReadBytes (needle_read.go), which
properly returns an error in both cases:
- ErrorSizeMismatch when offset < MaxPossibleVolumeSize (to trigger retry at offset+32GB)
- A descriptive error when offset >= MaxPossibleVolumeSize (after retry failed)
Fixes #7673
* refactor: use more accurate error message for size mismatch
| -rw-r--r-- | weed/storage/needle/needle_read_page.go | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/weed/storage/needle/needle_read_page.go b/weed/storage/needle/needle_read_page.go index ab0a69739..3bdcb7368 100644 --- a/weed/storage/needle/needle_read_page.go +++ b/weed/storage/needle/needle_read_page.go @@ -55,6 +55,7 @@ func (n *Needle) ReadNeedleMeta(r backend.BackendStorageFile, offset int64, size if OffsetSize == 4 && offset < int64(MaxPossibleVolumeSize) { return ErrorSizeMismatch } + return fmt.Errorf("size mismatch for entry at offset %d: found id %x size %d, expected size %d", offset, n.Id, n.Size, size) } n.DataSize = util.BytesToUint32(bytes[NeedleHeaderSize : NeedleHeaderSize+DataSizeSize]) startOffset := offset + NeedleHeaderSize |
