func()

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
}