aboutsummaryrefslogtreecommitdiff
path: root/weed/command
diff options
context:
space:
mode:
Diffstat (limited to 'weed/command')
-rw-r--r--weed/command/master.go27
-rw-r--r--weed/command/server.go28
-rw-r--r--weed/command/volume.go2
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")