// init configures a Ringpop instance and makes it ready to do comms. func (rp *Ringpop) init() error { if rp.channel == nil { return errors.New("Missing channel") } address, err := rp.identity() if err != nil { return err } rp.subChannel = rp.channel.GetSubChannel("ringpop", tchannel.Isolated) rp.registerHandlers() rp.node = swim.NewNode(rp.config.App, address, rp.subChannel, &swim.Options{ Clock: rp.clock, }) rp.node.RegisterListener(rp) rp.ring = hashring.New(farm.Fingerprint32, rp.configHashRing.ReplicaPoints) rp.ring.RegisterListener(rp) rp.stats.hostport = genStatsHostport(address) rp.stats.prefix = fmt.Sprintf("ringpop.%s", rp.stats.hostport) rp.stats.keys = make(map[string]string) rp.forwarder = forward.NewForwarder(rp, rp.subChannel) rp.forwarder.RegisterListener(rp) rp.startTimers() rp.setState(initialized) return nil }
// NewReplicator returns a new Replicator instance that makes calls with the given // SubChannel to the service defined by SubChannel.GetServiceName(). The given n/w/r // values will be used as defaults for the replicator when none are provided // Deprecation: logger is no longer used. func NewReplicator(s Sender, channel shared.SubChannel, logger log.Logger, opts *Options) *Replicator { f := forward.NewForwarder(s, channel) opts = mergeDefaultOptions(opts, &Options{3, 1, 3, Parallel}) logger = logging.Logger("replicator") if identity, err := s.WhoAmI(); err == nil { logger = logger.WithField("local", identity) } return &Replicator{s, channel, f, logger, opts} }