Example #1
0
func checkNodeStatus(line string) (*topo.Node, bool) {
	xs := strings.Split(line, " ")
	_, _, id, addr, flags, parent := xs[0], xs[1], xs[2], xs[3], xs[4], xs[5]
	node := topo.NewNodeFromString(addr)
	// basic info
	node.SetId(id)
	node.SetParentId(parent)
	handshake := false
	if strings.Contains(flags, "handshake") {
		handshake = true
	}
	if strings.Contains(flags, "fail?") {
		node.SetFail(true)
	}
	return node, handshake
}
Example #2
0
func main() {
	flag.Parse()

	seedNodes := []*topo.Node{}
	for _, addr := range strings.Split(seeds, ",") {
		glog.Info(addr)
		n := topo.NewNodeFromString(addr)
		if n == nil {
			glog.Fatal("invalid seeds %s", addr)
		}
		seedNodes = append(seedNodes, n)
	}
	if httpPort == 0 {
		glog.Fatal("invalid http port")
		flag.PrintDefaults()
	}
	if wsPort == 0 {
		glog.Fatal("invalid websocket port")
		flag.PrintDefaults()
	}

	initCh := make(chan error)
	go meta.Run(appName, localRegion, httpPort, wsPort, zkHosts, seedNodes, initCh)
	err := <-initCh
	if err != nil {
		glog.Warning(err)
	}

	streams.StartAllStreams()
	streams.LogStream.Sub(log.WriteFileHandler)
	streams.LogStream.Sub(log.WriteRingBufferHandler)

	sp := inspector.NewInspector()
	go sp.Run()

	c := controller.NewController()
	fe := frontend.NewFrontEnd(c, httpPort, wsPort)
	fe.Run()
}
Example #3
0
func (self *Inspector) buildNode(line string) (*topo.Node, bool, error) {
	xs := strings.Split(line, " ")
	mod, tag, id, addr, flags, parent := xs[0], xs[1], xs[2], xs[3], xs[4], xs[5]
	node := topo.NewNodeFromString(addr)
	ranges := []string{}
	for _, word := range xs[10:] {
		if strings.HasPrefix(word, "[") {
			word = word[1 : len(word)-1]
			xs := strings.Split(word, "->-")
			if len(xs) == 2 {
				slot, _ := strconv.Atoi(xs[0])
				node.AddMigrating(xs[1], slot)
			}
			xs = strings.Split(word, "-<-")
			if len(xs) == 2 {
				slot, _ := strconv.Atoi(xs[0])
				node.AddImporting(xs[1], slot)
			}
			continue
		}
		ranges = append(ranges, word)
	}

	for _, r := range ranges {
		xs = strings.Split(r, "-")
		if len(xs) == 2 {
			left, _ := strconv.Atoi(xs[0])
			right, _ := strconv.Atoi(xs[1])
			node.AddRange(topo.Range{left, right})
		} else {
			left, _ := strconv.Atoi(r)
			node.AddRange(topo.Range{left, left})
		}
	}

	// basic info
	node.SetId(id)
	node.SetParentId(parent)
	node.SetTag(tag)
	node.SetReadable(mod[0] == 'r')
	node.SetWritable(mod[1] == 'w')
	myself := false
	if strings.Contains(flags, "myself") {
		myself = true
	}
	if strings.Contains(flags, "master") {
		node.SetRole("master")
	} else if strings.Contains(flags, "slave") {
		node.SetRole("slave")
	}
	if strings.Contains(flags, "noaddr") {
		return nil, myself, ErrNodeNoAddr
	}
	if strings.Contains(flags, "handshake") {
		return nil, myself, ErrNodeInHandShake
	}
	if strings.Contains(flags, "fail?") {
		node.SetPFail(true)
		node.IncrPFailCount()
	}
	xs = strings.Split(tag, ":")
	if len(xs) == 3 {
		node.SetRegion(xs[0])
		node.SetZone(xs[1])
		node.SetRoom(xs[2])
	} else if node.Tag != "-" {
		return nil, myself, ErrInvalidTag
	}

	return node, myself, nil
}