Пример #1
0
func createCluster(hostport string, seednodes []string, app clusterApp) *cluster {
	channel, err := tchannel.NewChannel("kbase", nil)
	if err != nil {
		log.Fatalf("channel did not create successfully: %v", err)
	}

	ringpop, err := ringpop.New("kbase-app",
		ringpop.Channel(channel),
		ringpop.Identity(hostport),
		ringpop.Logger(bark.NewLoggerFromLogrus(log)),
	)
	if err != nil {
		log.Fatalf("Unable to create Ringpop: %v", err)
	}

	if err := channel.ListenAndServe(hostport); err != nil {
		log.Fatalf("could not listen on given hostport: %v", err)
	}

	opts := new(swim.BootstrapOptions)
	if len(seednodes) > 0 {
		opts.Hosts = seednodes
	}

	if _, err := ringpop.Bootstrap(opts); err != nil {
		log.Fatalf("ringpop bootstrap failed: %v", err)
	}

	cluster := &cluster{
		/*ring: Ring{
			hcodes: []int{},
			servers: make(map[int]string),
		},*/
		ringpop: ringpop,
		channel: channel,
		app:     app}

	ringpop.RegisterListener(cluster)

	return cluster
}