// Creates a new server. func NewRaftServer(config *configuration.Configuration, clusterConfig *ClusterConfiguration) *RaftServer { if !registeredCommands { registeredCommands = true for _, command := range internalRaftCommands { raft.RegisterCommand(command) } } s := &RaftServer{ host: config.HostnameOrDetect(), port: config.RaftServerPort, path: config.RaftDir, clusterConfig: clusterConfig, router: mux.NewRouter(), config: config, } rand.Seed(time.Now().Unix()) // Read existing name or generate a new one. if b, err := ioutil.ReadFile(filepath.Join(s.path, "name")); err == nil { s.name = string(b) } else { s.name = fmt.Sprintf("%07x", rand.Int())[0:7] if err = ioutil.WriteFile(filepath.Join(s.path, "name"), []byte(s.name), 0644); err != nil { panic(err) } } return s }
// Creates a new server. func NewRaftServer(config *configuration.Configuration, clusterConfig *cluster.ClusterConfiguration) *RaftServer { if !registeredCommands { registeredCommands = true for _, command := range internalRaftCommands { raft.RegisterCommand(command) } } s := &RaftServer{ host: config.HostnameOrDetect(), port: config.RaftServerPort, path: config.RaftDir, bind_address: config.BindAddress, clusterConfig: clusterConfig, notLeader: make(chan bool, 1), router: mux.NewRouter(), config: config, } // Read existing name or generate a new one. if b, err := ioutil.ReadFile(filepath.Join(s.path, "name")); err == nil { s.name = string(b) } else { var i uint64 if _, err := os.Stat("/dev/random"); err == nil { log.Info("Using /dev/random to initialize the raft server name") f, err := os.Open("/dev/random") if err != nil { panic(err) } defer f.Close() readBytes := 0 b := make([]byte, 8) for readBytes < 8 { n, err := f.Read(b[readBytes:]) if err != nil { panic(err) } readBytes += n } err = binary.Read(bytes.NewBuffer(b), binary.BigEndian, &i) if err != nil { panic(err) } } else { log.Info("Using rand package to generate raft server name") rand.Seed(time.Now().UnixNano()) i = uint64(rand.Int()) } s.name = fmt.Sprintf("%07x", i)[0:7] log.Info("Setting raft name to %s", s.name) if err = ioutil.WriteFile(filepath.Join(s.path, "name"), []byte(s.name), 0644); err != nil { panic(err) } } return s }
// TODO: check that database exists and create it if not func NewServer(config *configuration.Configuration, coord coordinator.Coordinator, clusterConfig *cluster.ClusterConfiguration) *Server { self := &Server{} self.listenAddress = config.GraphitePortString() self.database = config.GraphiteDatabase self.coordinator = coord self.shutdown = make(chan bool, 1) self.clusterConfig = clusterConfig return self }
func NewServer(config *configuration.Configuration) (*Server, error) { log.Info("Opening database at %s", config.DataDir) db, err := datastore.NewLevelDbDatastore(config.DataDir, config.LevelDbMaxOpenFiles) if err != nil { return nil, err } clusterConfig := coordinator.NewClusterConfiguration(config) raftServer := coordinator.NewRaftServer(config, clusterConfig) coord := coordinator.NewCoordinatorImpl(db, raftServer, clusterConfig) go coord.SyncLogs() requestHandler := coordinator.NewProtobufRequestHandler(db, coord, clusterConfig) protobufServer := coordinator.NewProtobufServer(config.ProtobufPortString(), requestHandler) eng, err := engine.NewQueryEngine(coord) if err != nil { return nil, err } raftServer.AssignEngineAndCoordinator(eng, coord) httpApi := http.NewHttpServer(config.ApiHttpPortString(), config.AdminAssetsDir, eng, coord, coord) httpApi.EnableSsl(config.ApiHttpSslPortString(), config.ApiHttpCertPath) adminServer := admin.NewHttpServer(config.AdminAssetsDir, config.AdminHttpPortString()) return &Server{ RaftServer: raftServer, Db: db, ProtobufServer: protobufServer, ClusterConfig: clusterConfig, HttpApi: httpApi, Coordinator: coord, AdminServer: adminServer, Config: config, RequestHandler: requestHandler}, nil }
func NewServer(config *configuration.Configuration) (*Server, error) { log.Info("Opening database at %s", config.DataDir) metaStore := metastore.NewStore() shardDb, err := datastore.NewShardDatastore(config, metaStore) if err != nil { return nil, err } newClient := func(connectString string) cluster.ServerConnection { return coordinator.NewProtobufClient(connectString, config.ProtobufTimeout.Duration) } writeLog, err := wal.NewWAL(config) if err != nil { return nil, err } clusterConfig := cluster.NewClusterConfiguration(config, writeLog, shardDb, newClient, metaStore) raftServer := coordinator.NewRaftServer(config, clusterConfig) metaStore.SetClusterConsensus(raftServer) clusterConfig.LocalRaftName = raftServer.GetRaftName() clusterConfig.SetShardCreator(raftServer) clusterConfig.CreateFutureShardsAutomaticallyBeforeTimeComes() coord := coordinator.NewCoordinatorImpl(config, raftServer, clusterConfig, metaStore) requestHandler := coordinator.NewProtobufRequestHandler(coord, clusterConfig) protobufServer := coordinator.NewProtobufServer(config.ProtobufListenString(), requestHandler) raftServer.AssignCoordinator(coord) httpApi := http.NewHttpServer(config.ApiHttpPortString(), config.ApiReadTimeout, config.AdminAssetsDir, coord, coord, clusterConfig, raftServer) httpApi.EnableSsl(config.ApiHttpSslPortString(), config.ApiHttpCertPath) graphiteApi := graphite.NewServer(config, coord, clusterConfig) adminServer := admin.NewHttpServer(config.AdminAssetsDir, config.AdminHttpPortString()) return &Server{ RaftServer: raftServer, ProtobufServer: protobufServer, ClusterConfig: clusterConfig, HttpApi: httpApi, GraphiteApi: graphiteApi, Coordinator: coord, AdminServer: adminServer, Config: config, RequestHandler: requestHandler, writeLog: writeLog, shardStore: shardDb}, nil }