// New creates an instance of a gossip node. func New(rpcContext *rpc.Context, grpcServer *grpc.Server, resolvers []resolver.Resolver, stopper *stop.Stopper, registry *metric.Registry) *Gossip { g := &Gossip{ Connected: make(chan struct{}), rpcContext: rpcContext, server: newServer(stopper, registry), outgoing: makeNodeSet(minPeers, registry.Gauge(ConnectionsOutgoingGaugeName)), bootstrapping: map[string]struct{}{}, disconnected: make(chan *client, 10), stalledCh: make(chan struct{}, 1), stallInterval: defaultStallInterval, bootstrapInterval: defaultBootstrapInterval, cullInterval: defaultCullInterval, nodeDescs: map[roachpb.NodeID]*roachpb.NodeDescriptor{}, resolverAddrs: map[util.UnresolvedAddr]resolver.Resolver{}, bootstrapAddrs: map[util.UnresolvedAddr]struct{}{}, } g.SetResolvers(resolvers) // Add ourselves as a SystemConfig watcher. g.is.registerCallback(KeySystemConfig, g.updateSystemConfig) // Add ourselves as a node descriptor watcher. g.is.registerCallback(MakePrefixPattern(KeyNodeIDPrefix), g.updateNodeAddress) RegisterGossipServer(grpcServer, g.server) return g }
// newServer creates and returns a server struct. func newServer(stopper *stop.Stopper, registry *metric.Registry) *server { return &server{ stopper: stopper, is: newInfoStore(0, util.UnresolvedAddr{}, stopper), incoming: makeNodeSet(minPeers, registry.Gauge(ConnectionsIncomingGaugeName)), nodeMap: make(map[util.UnresolvedAddr]serverInfo), tighten: make(chan roachpb.NodeID, 1), ready: make(chan struct{}), nodeMetrics: makeMetrics(registry), serverMetrics: makeMetrics(metric.NewRegistry()), } }
// MakeRuntimeStatSampler constructs a new RuntimeStatSampler object. func MakeRuntimeStatSampler(clock *hlc.Clock, reg *metric.Registry) RuntimeStatSampler { return RuntimeStatSampler{ registry: reg, clock: clock, cgoCalls: reg.Gauge(nameCgoCalls), goroutines: reg.Gauge(nameGoroutines), goAllocBytes: reg.Gauge(nameGoAllocBytes), goTotalBytes: reg.Gauge(nameGoTotalBytes), cgoAllocBytes: reg.Gauge(nameCgoAllocBytes), cgoTotalBytes: reg.Gauge(nameCgoTotalBytes), gcCount: reg.Gauge(nameGCCount), gcPauseNS: reg.Gauge(nameGCPauseNS), gcPausePercent: reg.GaugeFloat64(nameGCPausePercent), cpuUserNS: reg.Gauge(nameCPUUserNS), cpuUserPercent: reg.GaugeFloat64(nameCPUUserPercent), cpuSysNS: reg.Gauge(nameCPUSysNS), cpuSysPercent: reg.GaugeFloat64(nameCPUSysPercent), rss: reg.Gauge(nameRSS), } }