func newConfigAndServer(c *C) *RaftServer { path, err := ioutil.TempDir(os.TempDir(), "influxdb") c.Assert(err, IsNil) setupConfig := &configuration.Configuration{Hostname: "localhost", RaftDir: path, RaftServerPort: 0} config := cluster.NewClusterConfiguration(setupConfig, &WALMock{}, nil, newProtobufClient) server := NewRaftServer(setupConfig, config) return server }
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 }