// makeBaseQueue returns a new instance of baseQueue with the // specified shouldQueue function to determine which replicas to queue // and maxSize to limit the growth of the queue. Note that // maxSize doesn't prevent new replicas from being added, it just // limits the total size. Higher priority replicas can still be // added; their addition simply removes the lowest priority replica. func makeBaseQueue( name string, impl queueImpl, store *Store, gossip *gossip.Gossip, cfg queueConfig, ) baseQueue { bq := baseQueue{ name: name, impl: impl, store: store, gossip: gossip, queueConfig: cfg, incoming: make(chan struct{}, 1), } bq.mu.Locker = new(syncutil.Mutex) bq.mu.replicas = map[roachpb.RangeID]*replicaItem{} bq.ctx = context.TODO() // Prepend [name] to logs. bq.ctx = log.WithLogTag(bq.ctx, name, nil) bq.ctx = log.WithEventLog(bq.ctx, "queue", name) bq.processMu = new(syncutil.Mutex) return bq }
// New creates an instance of a gossip node. func New( ctx context.Context, rpcContext *rpc.Context, grpcServer *grpc.Server, resolvers []resolver.Resolver, stopper *stop.Stopper, registry *metric.Registry, ) *Gossip { ctx = log.WithEventLog(ctx, "gossip", "gossip") g := &Gossip{ ctx: ctx, Connected: make(chan struct{}), rpcContext: rpcContext, server: newServer(ctx, stopper, registry), outgoing: makeNodeSet(minPeers, metric.NewGauge(MetaConnectionsOutgoingGauge)), 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{}{}, } stopper.AddCloser(stop.CloserFn(func() { log.FinishEventLog(ctx) })) registry.AddMetric(g.outgoing.gauge) g.clientsMu.breakers = map[string]*circuit.Breaker{} log.Infof(g.ctx, "initial resolvers: %s", resolvers) g.SetResolvers(resolvers) g.mu.Lock() // Add ourselves as a SystemConfig watcher. g.mu.is.registerCallback(KeySystemConfig, g.updateSystemConfig) // Add ourselves as a node descriptor watcher. g.mu.is.registerCallback(MakePrefixPattern(KeyNodeIDPrefix), g.updateNodeAddress) g.mu.Unlock() RegisterGossipServer(grpcServer, g.server) return g }