shell: only one shell is allowed to connect to the cluster
fix https://github.com/chrislusf/seaweedfs/issues/1266
This commit is contained in:
@@ -190,6 +190,19 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ
|
|||||||
|
|
||||||
peerAddress := findClientAddress(stream.Context(), req.GrpcPort)
|
peerAddress := findClientAddress(stream.Context(), req.GrpcPort)
|
||||||
|
|
||||||
|
// only one shell can be connected at any time
|
||||||
|
if req.Name == "shell" {
|
||||||
|
if ms.currentAdminShellClient == ""{
|
||||||
|
ms.currentAdminShellClient = peerAddress
|
||||||
|
defer func() {
|
||||||
|
ms.currentAdminShellClient = ""
|
||||||
|
}()
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("only one concurrent shell allowed, but another shell is already connected from %s", peerAddress)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
stopChan := make(chan bool)
|
stopChan := make(chan bool)
|
||||||
|
|
||||||
clientName, messageChan := ms.addClient(req.Name, peerAddress)
|
clientName, messageChan := ms.addClient(req.Name, peerAddress)
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ type MasterServer struct {
|
|||||||
grpcDialOption grpc.DialOption
|
grpcDialOption grpc.DialOption
|
||||||
|
|
||||||
MasterClient *wdclient.MasterClient
|
MasterClient *wdclient.MasterClient
|
||||||
|
|
||||||
|
currentAdminShellClient string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMasterServer(r *mux.Router, option *MasterOption, peers []string) *MasterServer {
|
func NewMasterServer(r *mux.Router, option *MasterOption, peers []string) *MasterServer {
|
||||||
|
|||||||
Reference in New Issue
Block a user