diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-04-12 17:48:39 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-04-12 17:48:39 -0700 |
| commit | 5361f999ed112aa97b786e09256839db7a59ee3d (patch) | |
| tree | 8b17b0a222ab4b9c7cc763fdfa7f55620805d334 | |
| parent | 65919d971d354aac254aaf9b1b064b038e7b37fe (diff) | |
| download | seaweedfs-5361f999ed112aa97b786e09256839db7a59ee3d.tar.xz seaweedfs-5361f999ed112aa97b786e09256839db7a59ee3d.zip | |
shell: only one shell is allowed to connect to the cluster
fix https://github.com/chrislusf/seaweedfs/issues/1266
| -rw-r--r-- | weed/server/master_grpc_server.go | 13 | ||||
| -rw-r--r-- | weed/server/master_server.go | 2 |
2 files changed, 15 insertions, 0 deletions
diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index e5fcacc0e..1785a8ccb 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -190,6 +190,19 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ 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) clientName, messageChan := ms.addClient(req.Name, peerAddress) diff --git a/weed/server/master_server.go b/weed/server/master_server.go index 4a264d432..d089370db 100644 --- a/weed/server/master_server.go +++ b/weed/server/master_server.go @@ -64,6 +64,8 @@ type MasterServer struct { grpcDialOption grpc.DialOption MasterClient *wdclient.MasterClient + + currentAdminShellClient string } func NewMasterServer(r *mux.Router, option *MasterOption, peers []string) *MasterServer { |
