diff options
Diffstat (limited to 'weed/command')
| -rw-r--r-- | weed/command/master.go | 27 | ||||
| -rw-r--r-- | weed/command/server.go | 28 | ||||
| -rw-r--r-- | weed/command/volume.go | 2 |
3 files changed, 50 insertions, 7 deletions
diff --git a/weed/command/master.go b/weed/command/master.go index ec54fbd7b..eee22810b 100644 --- a/weed/command/master.go +++ b/weed/command/master.go @@ -10,9 +10,13 @@ import ( "time" "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/chrislusf/seaweedfs/weed/pb" "github.com/chrislusf/seaweedfs/weed/server" "github.com/chrislusf/seaweedfs/weed/util" "github.com/gorilla/mux" + "github.com/soheilhy/cmux" + "google.golang.org/grpc" + "google.golang.org/grpc/reflection" ) func init() { @@ -39,7 +43,7 @@ var ( mpulse = cmdMaster.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats") confFile = cmdMaster.Flag.String("conf", "/etc/weedfs/weedfs.conf", "Deprecating! xml configuration file") defaultReplicaPlacement = cmdMaster.Flag.String("defaultReplication", "000", "Default replication type if not specified.") - mTimeout = cmdMaster.Flag.Int("idleTimeout", 10, "connection idle seconds") + mTimeout = cmdMaster.Flag.Int("idleTimeout", 30, "connection idle seconds") mMaxCpu = cmdMaster.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") garbageThreshold = cmdMaster.Flag.String("garbageThreshold", "0.3", "threshold to vacuum and reclaim spaces") masterWhiteListOption = cmdMaster.Flag.String("whiteList", "", "comma separated Ip addresses having write permission. No limit if empty.") @@ -99,8 +103,25 @@ func runMaster(cmd *Command, args []string) bool { ms.SetRaftServer(raftServer) }() - if e := http.Serve(listener, r); e != nil { - glog.Fatalf("Fail to serve: %v", e) + // start grpc and http server + m := cmux.New(listener) + + grpcL := m.Match(cmux.HTTP2HeaderField("content-type", "application/grpc")) + httpL := m.Match(cmux.Any()) + + // Create your protocol servers. + grpcS := grpc.NewServer() + pb.RegisterSeaweedServer(grpcS, ms) + reflection.Register(grpcS) + + httpS := &http.Server{Handler: r} + + go grpcS.Serve(grpcL) + go httpS.Serve(httpL) + + if err := m.Serve(); err != nil { + glog.Fatalf("master server failed to serve: %v", err) } + return true } diff --git a/weed/command/server.go b/weed/command/server.go index 87146940f..5bde22517 100644 --- a/weed/command/server.go +++ b/weed/command/server.go @@ -11,10 +11,14 @@ import ( "time" "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/chrislusf/seaweedfs/weed/pb" "github.com/chrislusf/seaweedfs/weed/server" "github.com/chrislusf/seaweedfs/weed/storage" "github.com/chrislusf/seaweedfs/weed/util" "github.com/gorilla/mux" + "github.com/soheilhy/cmux" + "google.golang.org/grpc" + "google.golang.org/grpc/reflection" ) type ServerOptions struct { @@ -51,7 +55,7 @@ var ( serverIp = cmdServer.Flag.String("ip", "localhost", "ip or server name") serverBindIp = cmdServer.Flag.String("ip.bind", "0.0.0.0", "ip address to bind to") serverMaxCpu = cmdServer.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") - serverTimeout = cmdServer.Flag.Int("idleTimeout", 10, "connection idle seconds") + serverTimeout = cmdServer.Flag.Int("idleTimeout", 30, "connection idle seconds") serverDataCenter = cmdServer.Flag.String("dataCenter", "", "current volume server's data center name") serverRack = cmdServer.Flag.String("rack", "", "current volume server's rack name") serverWhiteListOption = cmdServer.Flag.String("whiteList", "", "comma separated Ip addresses having write permission. No limit if empty.") @@ -230,9 +234,27 @@ func runServer(cmd *Command, args []string) bool { }() raftWaitForMaster.Done() - if e := http.Serve(masterListener, r); e != nil { - glog.Fatalf("Master Fail to serve:%s", e.Error()) + + // start grpc and http server + m := cmux.New(masterListener) + + grpcL := m.Match(cmux.HTTP2HeaderField("content-type", "application/grpc")) + httpL := m.Match(cmux.Any()) + + // Create your protocol servers. + grpcS := grpc.NewServer() + pb.RegisterSeaweedServer(grpcS, ms) + reflection.Register(grpcS) + + httpS := &http.Server{Handler: r} + + go grpcS.Serve(grpcL) + go httpS.Serve(httpL) + + if err := m.Serve(); err != nil { + glog.Fatalf("master server failed to serve: %v", err) } + }() volumeWait.Wait() diff --git a/weed/command/volume.go b/weed/command/volume.go index ba498b8e4..0e69325b6 100644 --- a/weed/command/volume.go +++ b/weed/command/volume.go @@ -48,7 +48,7 @@ func init() { v.bindIp = cmdVolume.Flag.String("ip.bind", "0.0.0.0", "ip address to bind to") v.master = cmdVolume.Flag.String("mserver", "localhost:9333", "master server location") v.pulseSeconds = cmdVolume.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats, must be smaller than or equal to the master's setting") - v.idleConnectionTimeout = cmdVolume.Flag.Int("idleTimeout", 10, "connection idle seconds") + v.idleConnectionTimeout = cmdVolume.Flag.Int("idleTimeout", 30, "connection idle seconds") v.maxCpu = cmdVolume.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") v.dataCenter = cmdVolume.Flag.String("dataCenter", "", "current volume server's data center name") v.rack = cmdVolume.Flag.String("rack", "", "current volume server's rack name") |
