in oss/lib/set_meta.go [575:642]
func (sc *SetMetaCommand) setObjectMeta(bucket *oss.Bucket, object string, headers map[string]string, isUpdate, isDelete, batchOperate bool, versionId string) error {
allheaders := headers
isSkip := false
spath := ""
msg := "set_meta"
nowt := time.Now().Unix()
if batchOperate && sc.smOption.snapshotPath != "" {
spath = sc.formatSnapshotKey(bucket.BucketName, object, msg)
if skip := sc.skipSetMeta(spath); skip {
sc.updateSkip(1)
LogInfo("restore obj skip: %s\n", object)
return nil
}
}
if isUpdate || isDelete {
var options []oss.Option
if len(versionId) > 0 {
options = append(options, oss.VersionId(versionId))
}
// get object meta
props, err := sc.command.ossGetObjectStatRetry(bucket, object, options...)
if err != nil {
return err
}
// get object acl
objectACL, err := bucket.GetObjectACL(object, options...)
if err != nil {
return err
}
props.Set(StatACL, objectACL.ACL)
// merge
allheaders, isSkip = sc.mergeHeader(props, headers, isUpdate, isDelete)
if isSkip {
atomic.AddUint64(&sc.skipCount, uint64(1))
return nil
}
}
options, err := sc.command.getOSSOptions(headerOptionMap, allheaders)
if err != nil {
return err
}
if len(versionId) > 0 {
options = append(options, oss.VersionId(versionId))
}
err = sc.ossSetObjectMetaRetry(bucket, object, options...)
if batchOperate && sc.smOption.snapshotPath != "" {
if err != nil {
_ = sc.updateSnapshot(err, spath, nowt)
return err
} else {
err = sc.updateSnapshot(err, spath, nowt)
if err != nil {
return err
}
}
} else {
return err
}
return nil
}