aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/server/master_grpc_server.go13
-rw-r--r--weed/server/master_server.go2
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 {