// Start runs the RPC and HTTP servers, starts the gossip instance (if // selfBootstrap is true, uses the rpc server's address as the gossip // bootstrap), and starts the node using the supplied engines slice. func (s *Server) Start(selfBootstrap bool) error { if err := s.rpc.Listen(); err != nil { return util.Errorf("could not listen on %s: %s", s.ctx.Addr, err) } // Handle self-bootstrapping case for a single node. if selfBootstrap { selfResolver, err := resolver.NewResolver(&s.ctx.Context, s.rpc.Addr().String()) if err != nil { return err } s.gossip.SetResolvers([]resolver.Resolver{selfResolver}) } s.gossip.Start(s.rpc, s.stopper) if err := s.node.start(s.rpc, s.ctx.Engines, s.ctx.NodeAttributes, s.stopper); err != nil { return err } // Begin recording runtime statistics. runtime := status.NewRuntimeStatRecorder(s.node.Descriptor.NodeID, s.clock) s.tsDB.PollSource(runtime, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording time series data collected by the status monitor. s.recorder = status.NewNodeStatusRecorder(s.node.status, s.clock) s.tsDB.PollSource(s.recorder, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording status summaries. s.startWriteSummaries() log.Infof("starting %s server at %s", s.ctx.HTTPRequestScheme(), s.rpc.Addr()) s.initHTTP() s.rpc.Serve(s) return nil }
// Start runs the RPC and HTTP servers, starts the gossip instance (if // selfBootstrap is true, uses the rpc server's address as the gossip // bootstrap), and starts the node using the supplied engines slice. func (s *Server) Start(selfBootstrap bool) error { tlsConfig, err := s.ctx.GetServerTLSConfig() if err != nil { return err } unresolvedAddr := util.MakeUnresolvedAddr("tcp", s.ctx.Addr) ln, err := util.ListenAndServe(s.stopper, s, unresolvedAddr, tlsConfig) if err != nil { return err } s.listener = ln addr := ln.Addr() addrStr := addr.String() // Handle self-bootstrapping case for a single node. if selfBootstrap { selfResolver, err := resolver.NewResolver(&s.ctx.Context, addrStr) if err != nil { return err } s.gossip.SetResolvers([]resolver.Resolver{selfResolver}) } s.gossip.Start(s.rpc, addr, s.stopper) if err := s.node.start(s.rpc, addr, s.ctx.Engines, s.ctx.NodeAttributes); err != nil { return err } // Begin recording runtime statistics. runtime := status.NewRuntimeStatRecorder(s.node.Descriptor.NodeID, s.clock) s.tsDB.PollSource(runtime, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording time series data collected by the status monitor. s.recorder = status.NewNodeStatusRecorder(s.node.status, s.clock) s.tsDB.PollSource(s.recorder, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording status summaries. s.startWriteSummaries() s.sqlServer.SetNodeID(s.node.Descriptor.NodeID) s.status = newStatusServer(s.db, s.gossip, s.metaRegistry, s.ctx) log.Infof("starting %s server at %s", s.ctx.HTTPRequestScheme(), addr) s.initHTTP() // TODO(tamird): pick a port here host, _, err := net.SplitHostPort(addrStr) if err != nil { return err } return s.pgServer.Start(util.MakeUnresolvedAddr("tcp", net.JoinHostPort(host, "0"))) }
// Start runs the RPC and HTTP servers, starts the gossip instance (if // selfBootstrap is true, uses the rpc server's address as the gossip // bootstrap), and starts the node using the supplied engines slice. func (s *Server) Start(selfBootstrap bool) error { tlsConfig, err := s.ctx.GetServerTLSConfig() if err != nil { return err } unresolvedAddr := util.MakeUnresolvedAddr("tcp", s.ctx.Addr) ln, err := util.ListenAndServe(s.stopper, s, unresolvedAddr, tlsConfig) if err != nil { return err } s.listener = ln addr := ln.Addr() addrStr := addr.String() s.rpcContext.SetLocalServer(s.rpc, addrStr) // Handle self-bootstrapping case for a single node. if selfBootstrap { selfResolver, err := resolver.NewResolver(&s.ctx.Context, addrStr) if err != nil { return err } s.gossip.SetResolvers([]resolver.Resolver{selfResolver}) } s.gossip.Start(s.rpc, addr) if err := s.node.start(s.rpc, addr, s.ctx.Engines, s.ctx.NodeAttributes); err != nil { return err } // Begin recording runtime statistics. runtime := status.NewRuntimeStatRecorder(s.node.Descriptor.NodeID, s.clock) s.tsDB.PollSource(runtime, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording time series data collected by the status monitor. s.recorder = status.NewNodeStatusRecorder(s.node.status, s.clock) s.tsDB.PollSource(s.recorder, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording status summaries. s.startWriteSummaries() s.sqlServer.SetNodeID(s.node.Descriptor.NodeID) // Create and start the schema change manager only after a NodeID // has been assigned. s.schemaChangeManager = sql.NewSchemaChangeManager(*s.db, s.gossip, s.leaseMgr) s.schemaChangeManager.Start(s.stopper) s.status = newStatusServer(s.db, s.gossip, s.metaRegistry, s.ctx) log.Infof("starting %s server at %s", s.ctx.HTTPRequestScheme(), addr) s.initHTTP() return s.pgServer.Start(util.MakeUnresolvedAddr("tcp", s.ctx.PGAddr)) }
// Start starts the server on the specified port, starts gossip and // initializes the node using the engines from the server's context. func (s *Server) Start() error { tlsConfig, err := s.ctx.GetServerTLSConfig() if err != nil { return err } unresolvedAddr := util.NewUnresolvedAddr("tcp", s.ctx.Addr) ln, err := util.ListenAndServe(s.stopper, s, unresolvedAddr, tlsConfig) if err != nil { return err } s.listener = ln // Only used in tests. if err := officializeAddr(unresolvedAddr, ln.Addr()); err != nil { return err } s.rpcContext.SetLocalServer(s.rpc, unresolvedAddr.String()) s.grpc = grpc.NewServer() s.gossip.Start(s.grpc, unresolvedAddr) if err := s.node.start(s.rpc, unresolvedAddr, s.ctx.Engines, s.ctx.NodeAttributes); err != nil { return err } // Begin recording runtime statistics. runtime := status.NewRuntimeStatRecorder(s.node.Descriptor.NodeID, s.clock) s.tsDB.PollSource(runtime, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording time series data collected by the status monitor. s.recorder = status.NewNodeStatusRecorder(s.node.status, s.clock) s.tsDB.PollSource(s.recorder, s.ctx.MetricsFrequency, ts.Resolution10s, s.stopper) // Begin recording status summaries. s.startWriteSummaries() s.sqlServer.SetNodeID(s.node.Descriptor.NodeID) // Create and start the schema change manager only after a NodeID // has been assigned. s.schemaChangeManager = sql.NewSchemaChangeManager(*s.db, s.gossip, s.leaseMgr) s.schemaChangeManager.Start(s.stopper) s.status = newStatusServer(s.db, s.gossip, s.registry, s.ctx) log.Infof("starting %s server at %s", s.ctx.HTTPRequestScheme(), unresolvedAddr) s.initHTTP() return s.pgServer.Start(util.NewUnresolvedAddr("tcp", s.ctx.PGAddr)) }