func (s *Server) handleConns() { ch := make(chan net.Conn, 4096) defer close(ch) go func() { for c := range ch { x := router.NewSessionSize(c, s.conf.passwd, s.conf.maxBufSize, s.conf.maxTimeout) go x.Serve(s.router, s.conf.maxPipeline) } }() for { c, err := s.listener.Accept() if err != nil { if ne, ok := err.(net.Error); ok && ne.Temporary() { log.WarnErrorf(err, "[%p] proxy accept new connection failed, get temporary error", s) time.Sleep(time.Millisecond * 10) continue } log.WarnErrorf(err, "[%p] proxy accept new connection failed, get non-temporary error, must shutdown", s) return } else { ch <- c } } }
func jsonRet(output map[string]interface{}) (int, string) { b, err := json.Marshal(output) if err != nil { log.WarnErrorf(err, "to json failed") } return 200, string(b) }
func checkUlimit(min int) { ulimitN, err := exec.Command("/bin/sh", "-c", "ulimit -n").Output() if err != nil { log.WarnErrorf(err, "get ulimit failed") } n, err := strconv.Atoi(strings.TrimSpace(string(ulimitN))) if err != nil || n < min { log.Panicf("ulimit too small: %d, should be at least %d", n, min) } }
func apiGetProxyDebugVars() (int, string) { m := getAllProxyDebugVars() if m == nil { return 500, "Error getting proxy debug vars" } b, err := json.MarshalIndent(m, " ", " ") if err != nil { log.WarnErrorf(err, "to json failed") return 500, err.Error() } return 200, string(b) }
func (bc *BackendConn) Run() { log.Infof("backend conn [%p] to %s, start service", bc, bc.addr) for k := 0; ; k++ { err := bc.loopWriter() if err == nil { break } else { for i := len(bc.input); i != 0; i-- { r := <-bc.input bc.setResponse(r, nil, err) } } log.WarnErrorf(err, "backend conn [%p] to %s, restart [%d]", bc, bc.addr, k) time.Sleep(time.Millisecond * 50) } log.Infof("backend conn [%p] to %s, stop and exit", bc, bc.addr) }
func getAllProxyOps() int64 { proxies, err := models.ProxyList(unsafeZkConn, globalEnv.ProductName(), nil) if err != nil { log.ErrorErrorf(err, "get proxy list failed") return -1 } var total int64 for _, p := range proxies { i, err := p.Ops() if err != nil { log.WarnErrorf(err, "get proxy ops failed") } total += i } return total }
// for debug func getAllProxyDebugVars() map[string]map[string]interface{} { proxies, err := models.ProxyList(unsafeZkConn, globalEnv.ProductName(), nil) if err != nil { log.ErrorErrorf(err, "get proxy list failed") return nil } ret := make(map[string]map[string]interface{}) for _, p := range proxies { m, err := p.DebugVars() if err != nil { log.WarnErrorf(err, "get proxy debug varsfailed") } ret[p.Id] = m } return ret }