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 }
func main() { fileName := flag.String("config", "config.json.sample", "Config file") wantsVersion := flag.Bool("v", false, "Get version number") resetRootPassword := flag.Bool("reset-root", false, "Reset root password") pidFile := flag.String("pidfile", "", "the pid file") cpuProfiler := flag.String("cpuprofile", "", "filename where cpu profile data will be written") runtime.GOMAXPROCS(runtime.NumCPU()) flag.Parse() startProfiler(cpuProfiler) if wantsVersion != nil && *wantsVersion { fmt.Printf("InfluxDB v%s (git: %s)\n", version, gitSha) return } config := configuration.LoadConfiguration(*fileName) if pidFile != nil && *pidFile != "" { pid := strconv.Itoa(os.Getpid()) if err := ioutil.WriteFile(*pidFile, []byte(pid), 0644); err != nil { panic(err) } } log.Println("Starting Influx Server...") clusterConfig := coordinator.NewClusterConfiguration() os.MkdirAll(config.RaftDir, 0744) raftServer := coordinator.NewRaftServer(config.RaftDir, "localhost", config.RaftServerPort, clusterConfig) go func() { raftServer.ListenAndServe(config.SeedServers, false) }() if *resetRootPassword { time.Sleep(2 * time.Second) // wait for the raft server to join the cluster fmt.Printf("Resetting root's password to %s", coordinator.DEFAULT_ROOT_PWD) if err := raftServer.CreateRootUser(); err != nil { panic(err) } } os.MkdirAll(config.DataDir, 0744) log.Println("Opening database at ", config.DataDir) db, err := datastore.NewLevelDbDatastore(config.DataDir) if err != nil { panic(err) } coord := coordinator.NewCoordinatorImpl(db, raftServer, clusterConfig) eng, err := engine.NewQueryEngine(coord) if err != nil { panic(err) } log.Println() adminServer := admin.NewHttpServer(config.AdminAssetsDir, config.AdminHttpPortString()) log.Println("Starting admin interface on port", config.AdminHttpPort) go func() { adminServer.ListenAndServe() }() log.Println("Starting Http Api server on port", config.ApiHttpPort) server := http.NewHttpServer(config.ApiHttpPortString(), eng, coord, coord) server.ListenAndServe() }