diff options
| author | Eric Yang <lanqingy@usc.edu> | 2022-10-24 22:09:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-24 22:09:38 -0700 |
| commit | 51d462f2049b8c2c156e92ec53d4f7a0f913baa8 (patch) | |
| tree | f0c40bbd8c7b8230c4a63ac3ac8accf2bd035074 /weed/shell/command_volume_fsck.go | |
| parent | 34132b2c9f0d2d39cf597b8b0ba7b5123254702d (diff) | |
| download | seaweedfs-51d462f2049b8c2c156e92ec53d4f7a0f913baa8.tar.xz seaweedfs-51d462f2049b8c2c156e92ec53d4f7a0f913baa8.zip | |
ADHOC: volume fsck using append at ns (#3906)
* ADHOC: volume fsck using append at ns
* nit
* nit
Co-authored-by: root <root@HQ-10MSTD3EY.roblox.local>
Diffstat (limited to 'weed/shell/command_volume_fsck.go')
| -rw-r--r-- | weed/shell/command_volume_fsck.go | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/weed/shell/command_volume_fsck.go b/weed/shell/command_volume_fsck.go index de1f5d969..90e215790 100644 --- a/weed/shell/command_volume_fsck.go +++ b/weed/shell/command_volume_fsck.go @@ -396,9 +396,8 @@ func (c *commandVolumeFsck) collectOneVolumeFileIds(dataNodeId string, volumeId } buf.Write(resp.FileContent) } - fileredBuf := filterDeletedNeedleFromIdx(buf.Bytes()) if vinfo.isReadOnly == false { - index, err := idx.FirstInvalidIndex(fileredBuf.Bytes(), + index, err := idx.FirstInvalidIndex(buf.Bytes(), func(key types.NeedleId, offset types.Offset, size types.Size) (bool, error) { resp, err := volumeServerClient.ReadNeedleMeta(context.Background(), &volume_server_pb.ReadNeedleMetaRequest{ VolumeId: volumeId, @@ -409,16 +408,16 @@ func (c *commandVolumeFsck) collectOneVolumeFileIds(dataNodeId string, volumeId if err != nil { return false, fmt.Errorf("to read needle meta with id %d from volume %d with error %v", key, volumeId, err) } - return resp.LastModified <= cutoffFrom, nil + return resp.AppendAtNs <= cutoffFrom, nil }) if err != nil { fmt.Fprintf(c.writer, "Failed to search for last valid index on volume %d with error %v", volumeId, err) } else { - fileredBuf.Truncate(index * types.NeedleMapEntrySize) + buf.Truncate(index * types.NeedleMapEntrySize) } } idxFilename := getVolumeFileIdFile(c.tempFolder, dataNodeId, volumeId) - err = writeToFile(fileredBuf.Bytes(), idxFilename) + err = writeToFile(buf.Bytes(), idxFilename) if err != nil { return fmt.Errorf("failed to copy %d%s from %s: %v", volumeId, ext, vinfo.server, err) } @@ -704,14 +703,3 @@ func writeToFile(bytes []byte, fileName string) error { dst.Write(bytes) return nil } - -func filterDeletedNeedleFromIdx(arr []byte) bytes.Buffer { - var filteredBuf bytes.Buffer - for i := 0; i < len(arr); i += types.NeedleMapEntrySize { - size := types.BytesToSize(arr[i+types.NeedleIdSize+types.OffsetSize : i+types.NeedleIdSize+types.OffsetSize+types.SizeSize]) - if size > 0 { - filteredBuf.Write(arr[i : i+types.NeedleIdSize+types.OffsetSize+types.SizeSize]) - } - } - return filteredBuf -} |
