in oss/checkpoint.go [308:347]
func (cp *uploadCheckpoint) valid() bool {
// Compare the CP's Magic and the MD5
contents, err := os.ReadFile(cp.CpFilePath)
if err != nil {
return false
}
dcp := uploadCheckpoint{}
if err = json.Unmarshal(contents, &dcp.Info); err != nil {
return false
}
js, _ := json.Marshal(dcp.Info.Data)
sum := md5.Sum(js)
md5sum := hex.EncodeToString(sum[:])
if CheckpointMagic != dcp.Info.Magic ||
md5sum != dcp.Info.MD5 {
return false
}
// compare
if !reflect.DeepEqual(cp.Info.Data.ObjectInfo, dcp.Info.Data.ObjectInfo) ||
!reflect.DeepEqual(cp.Info.Data.FileMeta, dcp.Info.Data.FileMeta) ||
cp.Info.Data.FilePath != dcp.Info.Data.FilePath ||
cp.Info.Data.PartSize != dcp.Info.Data.PartSize {
return false
}
// download info
if len(dcp.Info.Data.UploadInfo.UploadId) == 0 {
return false
}
// update
cp.Info.Data.UploadInfo = dcp.Info.Data.UploadInfo
return true
}