func runSetProxyStatus(proxyName, status string) error { if err := models.SetProxyStatus(zkConn, productName, proxyName, status); err != nil { log.Warning(err) return err } return nil }
func apiSetProxyStatus(proxy models.ProxyInfo, param martini.Params) (int, string) { conn := CreateZkConn() defer conn.Close() err := models.SetProxyStatus(conn, productName, proxy.Id, proxy.State) if err != nil { log.Warning(err) return 500, err.Error() } return jsonRetSucc() }
func apiSetProxyStatus(proxy models.ProxyInfo, param martini.Params) (int, string) { err := models.SetProxyStatus(safeZkConn, globalEnv.ProductName(), proxy.Id, proxy.State) if err != nil { // if this proxy is not online, just return success if proxy.State == models.PROXY_STATE_MARK_OFFLINE && zkhelper.ZkErrorEqual(err, zk.ErrNoNode) { return jsonRetSucc() } log.Warning(errors.ErrorStack(err)) return 500, err.Error() } return jsonRetSucc() }
//this should be the last test func TestMarkOffline(t *testing.T) { suicide := int64(0) go func() { s.Join() atomic.StoreInt64(&suicide, 1) }() err := models.SetProxyStatus(conn, conf.productName, conf.proxyId, models.PROXY_STATE_MARK_OFFLINE) assert.MustNoError(err) time.Sleep(3 * time.Second) if atomic.LoadInt64(&suicide) == 0 { t.Error("shoud be suicided") } }
func init() { conn = zkhelper.NewConn() conf = &Config{ proxyId: "proxy_test", productName: "test", zkAddr: "localhost:2181", fact: func(string, int) (zkhelper.Conn, error) { return conn, nil }, proto: "tcp4", } //init action path prefix := models.GetWatchActionPath(conf.productName) err := models.CreateActionRootPath(conn, prefix) assert.MustNoError(err) //init slot err = models.InitSlotSet(conn, conf.productName, 1024) assert.MustNoError(err) //init server group g1 := models.NewServerGroup(conf.productName, 1) g1.Create(conn) g2 := models.NewServerGroup(conf.productName, 2) g2.Create(conn) redis1, _ = miniredis.Run() redis2, _ = miniredis.Run() s1 := models.NewServer(models.SERVER_TYPE_MASTER, redis1.Addr()) s2 := models.NewServer(models.SERVER_TYPE_MASTER, redis2.Addr()) g1.AddServer(conn, s1, "") g2.AddServer(conn, s2, "") //set slot range err = models.SetSlotRange(conn, conf.productName, 0, 511, 1, models.SLOT_STATUS_ONLINE) assert.MustNoError(err) err = models.SetSlotRange(conn, conf.productName, 512, 1023, 2, models.SLOT_STATUS_ONLINE) assert.MustNoError(err) s = New(":19000", ":11000", conf) err = models.SetProxyStatus(conn, conf.productName, conf.proxyId, models.PROXY_STATE_ONLINE) assert.MustNoError(err) }
func initReal() { conn = zkhelper.NewConn() conf = &Config{ proxyId: "proxy_test", productName: "test", zkAddr: "192.168.28.191:2181", fact: nil, proto: "tcp4", provider: "zookeeper", zkSessionTimeout: 30, zkReadTimeout: 30, } c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGQUIT, os.Kill) go func() { <-c log.Info("ctrl-c or SIGTERM found, bye bye...") s.Close() }() go func() { log.Info(http.ListenAndServe("192.168.28.192:6060", nil)) }() go func() { time.Sleep(10 * time.Second) zkConn, err := zkhelper.ConnectToZk(conf.zkAddr, 20000) if err != nil { log.Errorf("connect to zk: %+v", errors.Trace(err)) } else { err = models.SetProxyStatus(zkConn, conf.productName, conf.proxyId, models.PROXY_STATE_ONLINE) if err != nil { log.Errorf("set proxy error: %+v", errors.Trace(err)) } } zkConn.Close() }() go func() { err := http.ListenAndServe("192.168.28.192:11001", nil) log.PanicError(err, "http debug server quit") }() s = New("192.168.28.192:19001", "192.168.28.192:11001", conf) }
//this should be the last test func TestMarkOffline(t *testing.T) { InitEnv() suicide := int64(0) proxyMutex.Lock() s.OnSuicide = func() error { atomic.StoreInt64(&suicide, 1) return nil } proxyMutex.Unlock() err := models.SetProxyStatus(conn, conf.productName, conf.proxyId, models.PROXY_STATE_MARK_OFFLINE) assert.MustNoError(err) time.Sleep(3 * time.Second) if atomic.LoadInt64(&suicide) == 0 { t.Error("shoud be suicided") } }
func InitEnv() { go once.Do(func() { conn = zkhelper.NewConn() conf = &Config{ proxyId: "proxy_test", productName: "test", zkAddr: "localhost:2181", fact: func(string) (zkhelper.Conn, error) { return conn, nil }, proto: "tcp4", } //init action path prefix := models.GetWatchActionPath(conf.productName) err := models.CreateActionRootPath(conn, prefix) assert.MustNoError(err) //init slot err = models.InitSlotSet(conn, conf.productName, 1024) assert.MustNoError(err) //init server group g1 := models.NewServerGroup(conf.productName, 1) g1.Create(conn) g2 := models.NewServerGroup(conf.productName, 2) g2.Create(conn) redis1, _ = miniredis.Run() redis2, _ = miniredis.Run() s1 := models.NewServer(models.SERVER_TYPE_MASTER, redis1.Addr()) s2 := models.NewServer(models.SERVER_TYPE_MASTER, redis2.Addr()) g1.AddServer(conn, s1, "") g2.AddServer(conn, s2, "") //set slot range err = models.SetSlotRange(conn, conf.productName, 0, 511, 1, models.SLOT_STATUS_ONLINE) assert.MustNoError(err) err = models.SetSlotRange(conn, conf.productName, 512, 1023, 2, models.SLOT_STATUS_ONLINE) assert.MustNoError(err) go func() { //set proxy online time.Sleep(3 * time.Second) err := models.SetProxyStatus(conn, conf.productName, conf.proxyId, models.PROXY_STATE_ONLINE) assert.MustNoError(err) time.Sleep(2 * time.Second) proxyMutex.Lock() defer proxyMutex.Unlock() assert.Must(s.info.State == models.PROXY_STATE_ONLINE) }() proxyMutex.Lock() s, err = NewServer(":19000", ":11000", conf) assert.MustNoError(err) proxyMutex.Unlock() s.Serve() }) waitonce.Do(func() { time.Sleep(10 * time.Second) }) }
func (top *Topology) SetProxyStatus(proxyName string, status string) error { return models.SetProxyStatus(top.zkConn, top.ProductName, proxyName, status) }
func InitEnv() { go once.Do(func() { conn = zkhelper.NewConn() conf = &Conf{ proxyId: "proxy_test", productName: "test", zkAddr: "localhost:2181", netTimeout: 5, f: func(string) (zkhelper.Conn, error) { return conn, nil }, proto: "tcp4", } //init action path prefix := models.GetWatchActionPath(conf.productName) err := models.CreateActionRootPath(conn, prefix) if err != nil { log.Fatal(err) } //init slot err = models.InitSlotSet(conn, conf.productName, 1024) if err != nil { log.Fatal(err) } //init server group g1 := models.NewServerGroup(conf.productName, 1) g1.Create(conn) g2 := models.NewServerGroup(conf.productName, 2) g2.Create(conn) redis1, _ = miniredis.Run() redis2, _ = miniredis.Run() s1 := models.NewServer(models.SERVER_TYPE_MASTER, redis1.Addr()) s2 := models.NewServer(models.SERVER_TYPE_MASTER, redis2.Addr()) g1.AddServer(conn, s1) g2.AddServer(conn, s2) //set slot range err = models.SetSlotRange(conn, conf.productName, 0, 511, 1, models.SLOT_STATUS_ONLINE) if err != nil { log.Fatal(err) } err = models.SetSlotRange(conn, conf.productName, 512, 1023, 2, models.SLOT_STATUS_ONLINE) if err != nil { log.Fatal(err) } go func() { //set proxy online time.Sleep(3 * time.Second) err := models.SetProxyStatus(conn, conf.productName, conf.proxyId, models.PROXY_STATE_ONLINE) if err != nil { log.Fatal(errors.ErrorStack(err)) } time.Sleep(2 * time.Second) proxyMutex.Lock() defer proxyMutex.Unlock() pi := s.getProxyInfo() if pi.State != models.PROXY_STATE_ONLINE { log.Fatalf("should be online, we got %s", pi.State) } }() proxyMutex.Lock() s = NewServer(":19000", ":11000", conf, ) proxyMutex.Unlock() s.Run() }) waitonce.Do(func() { time.Sleep(10 * time.Second) }) }