mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
feat(mastercli): hybrid cloud vol.volStorageClass can be changed by "cfs-cli volume update"
Signed-off-by: true1064 <tangjingyu@oppo.com>
This commit is contained in:
parent
347208f189
commit
7a7b663b6c
@ -304,6 +304,8 @@ func newVolUpdateCmd(client *master.MasterClient) *cobra.Command {
|
||||
var optTrashInterval int64
|
||||
var optAccessTimeValidInterval int64
|
||||
var optEnablePersistAccessTime string
|
||||
var optVolStorageClass int
|
||||
|
||||
confirmString := strings.Builder{}
|
||||
var vv *proto.SimpleVolView
|
||||
cmd := &cobra.Command{
|
||||
@ -662,6 +664,21 @@ func newVolUpdateCmd(client *master.MasterClient) *cobra.Command {
|
||||
confirmString.WriteString(fmt.Sprintf(" EnableAutoDpMetaRepair : %v", vv.EnableAutoDpMetaRepair))
|
||||
}
|
||||
|
||||
if optVolStorageClass != 0 {
|
||||
if !proto.IsValidStorageClass(uint32(optVolStorageClass)) {
|
||||
err = fmt.Errorf("invalid param VolStorageClass: %v\n", optVolStorageClass)
|
||||
return
|
||||
}
|
||||
|
||||
isChange = true
|
||||
confirmString.WriteString(fmt.Sprintf(" VolStorageClass : %v -> %v\n",
|
||||
vv.VolStorageClass, optVolStorageClass))
|
||||
vv.VolStorageClass = uint32(optVolStorageClass)
|
||||
} else {
|
||||
confirmString.WriteString(fmt.Sprintf(" VolStorageClass : %v\n",
|
||||
proto.StorageClassString(vv.VolStorageClass)))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -721,6 +738,7 @@ func newVolUpdateCmd(client *master.MasterClient) *cobra.Command {
|
||||
cmd.Flags().Int64Var(&optDeleteLockTime, CliFlagDeleteLockTime, -1, "Specify delete lock time[Unit: hour] for volume")
|
||||
cmd.Flags().StringVar(&clientIDKey, CliFlagClientIDKey, client.ClientIDKey(), CliUsageClientIDKey)
|
||||
cmd.Flags().StringVar(&optEnableDpAutoMetaRepair, CliFlagAutoDpMetaRepair, "", "Enable or disable dp auto meta repair")
|
||||
cmd.Flags().IntVar(&optVolStorageClass, CliFlagVolStorageClass, 0, "specify volStorageClass")
|
||||
|
||||
cmd.Flags().Int64Var(&optTrashInterval, CliFlagTrashInterval, -1, "The retention period for files in trash")
|
||||
cmd.Flags().Int64Var(&optAccessTimeValidInterval, CliFlagAccessTimeValidInterval, -1, "Effective time interval for accesstime, at least 1800 [Unit: second]")
|
||||
|
||||
@ -419,6 +419,7 @@ type updateVolReq struct {
|
||||
enableAutoDpMetaRepair bool
|
||||
accessTimeValidInterval int64
|
||||
enablePersistAccessTime bool
|
||||
volStorageClass uint32
|
||||
}
|
||||
|
||||
func parseColdVolUpdateArgs(r *http.Request, vol *Vol) (args *coldVolArgs, err error) {
|
||||
@ -579,6 +580,31 @@ func parseVolUpdateReq(r *http.Request, vol *Vol, req *updateVolReq) (err error)
|
||||
req.dpSelectorParm = vol.dpSelectorParm
|
||||
}
|
||||
|
||||
if req.volStorageClass, err = extractUint32WithDefault(r, volStorageClassKey, vol.volStorageClass); err != nil {
|
||||
err = fmt.Errorf("failed to extract key: %v", volStorageClassKey)
|
||||
log.LogErrorf("[parseVolUpdateReq] err: %v", err.Error())
|
||||
return
|
||||
}
|
||||
if vol.volStorageClass == proto.StorageClass_BlobStore {
|
||||
if req.volStorageClass != vol.volStorageClass {
|
||||
err = fmt.Errorf(" vol.volStorageClass is StorageClass_BlobStore, not allow to change it")
|
||||
log.LogErrorf("[parseVolUpdateReq] err: %v", err.Error())
|
||||
return
|
||||
}
|
||||
} else if proto.IsStorageClassReplica(vol.volStorageClass) {
|
||||
if !proto.IsStorageClassReplica(req.volStorageClass) {
|
||||
err = fmt.Errorf(" vol.volStorageClass is replica, not allow to change to: %v",
|
||||
proto.StorageClassString(req.volStorageClass))
|
||||
log.LogErrorf("[parseVolUpdateReq] err: %v", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if req.volStorageClass != vol.volStorageClass {
|
||||
log.LogInfof("[parseVolUpdateReq] vol.volStorageClass(%v) will be changed to: %v",
|
||||
proto.StorageClassString(vol.volStorageClass), proto.StorageClassString(req.volStorageClass))
|
||||
}
|
||||
}
|
||||
|
||||
if proto.IsCold(vol.VolType) {
|
||||
req.followerRead = true
|
||||
req.coldArgs, err = parseColdVolUpdateArgs(r, vol)
|
||||
|
||||
@ -2352,6 +2352,7 @@ func (m *Server) updateVol(w http.ResponseWriter, r *http.Request) {
|
||||
newArgs.dpReplicaNum = uint8(req.replicaNum)
|
||||
newArgs.dpReadOnlyWhenVolFull = req.dpReadOnlyWhenVolFull
|
||||
newArgs.enableAutoDpMetaRepair = req.enableAutoDpMetaRepair
|
||||
newArgs.volStorageClass = req.volStorageClass
|
||||
|
||||
log.LogWarnf("[updateVolOut] name [%s], z1 [%s], z2[%s] replicaNum[%v]", req.name, req.zoneName, vol.Name, req.replicaNum)
|
||||
if err = m.cluster.updateVol(req.name, req.authKey, newArgs); err != nil {
|
||||
|
||||
@ -3411,7 +3411,6 @@ func (c *Cluster) deleteMetaNodeFromCache(metaNode *MetaNode) {
|
||||
go metaNode.clean()
|
||||
}
|
||||
|
||||
//TODO:tangjingyu: need to update volStorageClass or allowedStorageClass?
|
||||
func (c *Cluster) updateVol(name, authKey string, newArgs *VolVarargs) (err error) {
|
||||
var (
|
||||
vol *Vol
|
||||
|
||||
@ -57,6 +57,7 @@ type VolVarargs struct {
|
||||
enableAutoDpMetaRepair bool
|
||||
accessTimeValidInterval int64
|
||||
enablePersistAccessTime bool
|
||||
volStorageClass uint32
|
||||
}
|
||||
|
||||
type CacheSubItem struct {
|
||||
@ -1697,6 +1698,7 @@ func setVolFromArgs(args *VolVarargs, vol *Vol) {
|
||||
vol.AccessTimeInterval = args.accessTimeInterval
|
||||
vol.EnableAutoMetaRepair.Store(args.enableAutoDpMetaRepair)
|
||||
vol.EnablePersistAccessTime = args.enablePersistAccessTime
|
||||
vol.volStorageClass = args.volStorageClass
|
||||
}
|
||||
|
||||
func getVolVarargs(vol *Vol) *VolVarargs {
|
||||
@ -1739,6 +1741,7 @@ func getVolVarargs(vol *Vol) *VolVarargs {
|
||||
trashInterval: vol.TrashInterval,
|
||||
enablePersistAccessTime: vol.EnablePersistAccessTime,
|
||||
enableAutoDpMetaRepair: vol.EnableAutoMetaRepair.Load(),
|
||||
volStorageClass: vol.volStorageClass,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -299,6 +299,7 @@ func (api *AdminAPI) UpdateVolume(
|
||||
request.addParam("trashInterval", strconv.FormatInt(vv.TrashInterval, 10))
|
||||
request.addParam("accessTimeValidInterval", strconv.FormatInt(vv.AccessTimeInterval, 10))
|
||||
request.addParam("enablePersistAccessTime", strconv.FormatBool(vv.EnablePersistAccessTime))
|
||||
request.addParam("volStorageClass", strconv.FormatUint(uint64(vv.VolStorageClass), 10))
|
||||
|
||||
if txMask != "" {
|
||||
request.addParam("enableTxMask", txMask)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user