Skip to content

Commit

Permalink
Enhancement: auto create user while create volume
Browse files Browse the repository at this point in the history
Auto create user while create volume if the owner user is not exists.
Add a option for force transfer volume to target user.

Signed-off-by: Mofei Zhang <[email protected]>
  • Loading branch information
mervinkid committed Mar 26, 2020
1 parent e7855c9 commit 397edb4
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 19 deletions.
16 changes: 16 additions & 0 deletions cli/cmd/vol.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,8 @@ const (
)

func newVolTransferCmd(client *master.MasterClient) *cobra.Command {
var optYes bool
var optForce bool
var cmd = &cobra.Command{
Use: cmdVolTransferUse,
Short: cmdVolTransferShort,
Expand All @@ -281,6 +283,17 @@ func newVolTransferCmd(client *master.MasterClient) *cobra.Command {
}
}()

// ask user for confirm
if !optYes {
stdout("Transfer volume [%v] to user [%v] (yes/no)[no]:", volume, userID)
var confirm string
_, _ = fmt.Scanln(&confirm)
if confirm != "yes" {
stdout("Abort by user.\n")
return
}
}

// check target user and volume
var volSimpleView *proto.SimpleVolView
if volSimpleView, err = client.AdminAPI().GetVolumeSimpleInfo(volume); err != nil {
Expand All @@ -298,12 +311,15 @@ func newVolTransferCmd(client *master.MasterClient) *cobra.Command {
Volume: volume,
UserSrc: volSimpleView.Owner,
UserDst: userInfo.UserID,
Force: optForce,
}
if _, err = client.UserAPI().TransferVol(&param); err != nil {
return
}
},
}
cmd.Flags().BoolVarP(&optYes, "yes", "y", false, "Answer yes for all questions")
cmd.Flags().BoolVarP(&optForce, "force", "f", false, "Force transfer without current owner check")
return cmd
}

Expand Down
18 changes: 9 additions & 9 deletions docker/script/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,37 @@
mkdir -p /go/src/github.com/chubaofs/chubaofs/docker/bin;
failed=0

echo -n 'build server ... ';
echo -n 'Building ChubaoFS Server ... ';
cd /go/src/github.com/chubaofs/chubaofs/cmd;
bash ./build.sh &>> /tmp/cfs_build_output
if [[ $? -eq 0 ]]; then
echo -e "\033[32msuccess\033[0m";
echo -e "\033[32mdone\033[0m";
mv cfs-server /go/src/github.com/chubaofs/chubaofs/docker/bin/cfs-server;
else
echo -e "\033[31mfailed\033[0m";
echo -e "\033[31mfail\033[0m";
failed=1
fi


echo -n 'build client ... ' ;
echo -n 'Building ChubaoFS Client ... ' ;
cd /go/src/github.com/chubaofs/chubaofs/client;
bash ./build.sh &>> /tmp/cfs_build_output
if [[ $? -eq 0 ]]; then
echo -e "\033[32msuccess\033[0m";
echo -e "\033[32mdone\033[0m";
mv cfs-client /go/src/github.com/chubaofs/chubaofs/docker/bin/cfs-client;
else
echo -e "\033[31mfailed\033[0m";
echo -e "\033[31mfail\033[0m";
failed=1
fi

echo -n 'build cli ... ';
echo -n 'Building ChubaoFS CLI ... ';
cd /go/src/github.com/chubaofs/chubaofs/cli;
bash ./build.sh &>> /tmp/cfs_build_output;
if [[ $? -eq 0 ]]; then
echo -e "\033[32msuccess\033[0m";
echo -e "\033[32mdone\033[0m";
mv cfs-cli /go/src/github.com/chubaofs/chubaofs/docker/bin/cfs-cli;
else
echo -e "\033[31mfailed\033[0m";
echo -e "\033[31mfail\033[0m";
failed=1
fi

Expand Down
6 changes: 1 addition & 5 deletions master/api_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -1830,10 +1830,6 @@ func (m *Server) associateVolWithUser(userID, volName string) error {
if userInfo, err = m.user.getUserInfo(userID); err != nil && err != proto.ErrUserNotExists {
return err
}
if err == proto.ErrUserNotExists {
return nil
}
/* todo remove create user automatically
if err == proto.ErrUserNotExists {
var param = proto.UserCreateParam{
ID: userID,
Expand All @@ -1843,7 +1839,7 @@ func (m *Server) associateVolWithUser(userID, volName string) error {
if userInfo, err = m.user.createKey(&param); err != nil {
return err
}
} */
}
if _, err = m.user.addOwnVol(userInfo.UserID, volName); err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion master/api_service_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func (m *Server) transferUserVol(w http.ResponseWriter, r *http.Request) {
sendErrReply(w, r, &proto.HTTPReply{Code: proto.ErrCodeVolNotExists, Msg: err.Error()})
return
}
if vol.Owner != param.UserSrc {
if !param.Force && vol.Owner != param.UserSrc {
sendErrReply(w, r, newErrHTTPReply(proto.ErrHaveNoPolicy))
return
}
Expand Down
17 changes: 13 additions & 4 deletions master/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,15 +331,23 @@ func (u *User) deleteVolPolicy(volName string) (err error) {

func (u *User) transferVol(params *proto.UserTransferVolParam) (targetUserInfo *proto.UserInfo, err error) {
var userInfo *proto.UserInfo
if userInfo, err = u.getUserInfo(params.UserSrc); err == nil {
if !userInfo.Policy.IsOwn(params.Volume) {
userInfo, err = u.getUserInfo(params.UserSrc)
if (err != nil && err != proto.ErrUserNotExists) || (!params.Force && err == proto.ErrUserNotExists) {
return
}
if err == nil {
var isOwned = userInfo.Policy.IsOwn(params.Volume)
if !isOwned && !params.Force {
err = proto.ErrHaveNoPolicy
return
}
if _, err = u.removeOwnVol(params.UserSrc, params.Volume); err != nil {
return
if isOwned {
if _, err = u.removeOwnVol(params.UserSrc, params.Volume); err != nil {
return
}
}
}

if targetUserInfo, err = u.addOwnVol(params.UserDst, params.Volume); err != nil {
return
}
Expand Down Expand Up @@ -401,6 +409,7 @@ func (u *User) removeUserFromVol(userID, volName string) (err error) {
volUser.UserIDs = removeString(volUser.UserIDs, userID)
} else {
err = proto.ErrHaveNoPolicy
return
}
if err = u.syncUpdateVolUser(volUser); err != nil {
err = proto.ErrPersistenceByRaft
Expand Down
1 change: 1 addition & 0 deletions proto/user_proto.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ type UserTransferVolParam struct {
Volume string `json:"volume"`
UserSrc string `json:"user_src"`
UserDst string `json:"user_dst"`
Force bool `json:"force"`
}

type UserUpdateParam struct {
Expand Down

0 comments on commit 397edb4

Please sign in to comment.