本文整理汇总了Golang中github.com/YongMan/codis/pkg/utils/log.Infof函数的典型用法代码示例。如果您正苦于以下问题:Golang Infof函数的具体用法?Golang Infof怎么用?Golang Infof使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Infof函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Rebalance
// experimental simple auto rebalance :)
func Rebalance() error {
targetQuota, err := getQuotaMap(safeZkConn)
if err != nil {
return errors.Trace(err)
}
livingNodes, err := getLivingNodeInfos(safeZkConn)
if err != nil {
return errors.Trace(err)
}
log.Infof("start rebalance")
for _, node := range livingNodes {
for len(node.CurSlots) > targetQuota[node.GroupId] {
for _, dest := range livingNodes {
if dest.GroupId != node.GroupId && len(dest.CurSlots) < targetQuota[dest.GroupId] {
slot := node.CurSlots[len(node.CurSlots)-1]
// create a migration task
info := &MigrateTaskInfo{
Delay: 0,
SlotId: slot,
NewGroupId: dest.GroupId,
Status: MIGRATE_TASK_PENDING,
CreateAt: strconv.FormatInt(time.Now().Unix(), 10),
}
globalMigrateManager.PostTask(info)
node.CurSlots = node.CurSlots[0 : len(node.CurSlots)-1]
dest.CurSlots = append(dest.CurSlots, slot)
}
}
}
}
log.Infof("rebalance tasks submit finish")
return nil
}
开发者ID:YongMan,项目名称:codis,代码行数:35,代码来源:rebalancer.go
示例2: handleAskRequest
/*
* 对后端返回的ASK,重新向正确的后端发送
* r : 已经返回ASK的请求
*/
func (s *Session) handleAskRequest(r *Request) (*Request, error) {
// reset response
r.Response.Resp, r.Response.Err = nil, nil
usnow := microseconds()
s.LastOpUnix = usnow / 1e6
s.Ops++
// get hash key of the request
hkey := getHashKey(r.Resp, r.OpStr)
log.Infof("ASK: use key: %s to choose backend", string(hkey))
// create a asking request to backend
nr := &Request{
OpStr: "ASKING",
Start: usnow,
Resp: redis.NewString([]byte("ASKING")),
Wait: &sync.WaitGroup{},
Failed: &s.failed,
}
nr, err := s.handleRequestAsking(nr, hkey)
log.Infof("ASK: after dispatch asking request, waiting. error=%s", err)
if err != nil {
return r, err
} else {
s.GetTasks() <- nr
}
// resend the r to backend
err = s.GetDispather().Dispatch(r)
if err == nil {
s.GetTasks() <- r
}
return r, err
}
开发者ID:YongMan,项目名称:codis,代码行数:39,代码来源:session.go
示例3: waitOnline
func (s *Server) waitOnline() bool {
for {
info, err := s.topo.GetProxyInfo(s.info.Id)
if err != nil {
log.PanicErrorf(err, "get proxy info failed: %s", s.info.Id)
}
switch info.State {
case models.PROXY_STATE_MARK_OFFLINE:
log.Infof("mark offline, proxy got offline event: %s", s.info.Id)
s.markOffline()
return false
case models.PROXY_STATE_ONLINE:
s.info.State = info.State
log.Infof("we are online: %s", s.info.Id)
s.rewatchProxy()
return true
}
select {
case <-s.kill:
log.Infof("mark offline, proxy is killed: %s", s.info.Id)
s.markOffline()
return false
default:
}
log.Infof("wait to be online: %s", s.info.Id)
time.Sleep(3 * time.Second)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:28,代码来源:proxy.go
示例4: loopEvents
func (s *Server) loopEvents() {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
var tick int = 0
for s.info.State == models.PROXY_STATE_ONLINE {
select {
case <-s.kill:
log.Infof("mark offline, proxy is killed: %s", s.info.Id)
s.markOffline()
case e := <-s.evtbus:
evtPath := getEventPath(e)
log.Infof("got event %s, %v, lastActionSeq %d", s.info.Id, e, s.lastActionSeq)
if strings.Index(evtPath, models.GetActionResponsePath(s.conf.productName)) == 0 {
seq, err := strconv.Atoi(path.Base(evtPath))
if err != nil {
log.ErrorErrorf(err, "parse action seq failed")
} else {
if seq < s.lastActionSeq {
log.Infof("ignore seq = %d", seq)
continue
}
}
}
s.processAction(e)
case <-ticker.C:
if maxTick := s.conf.pingPeriod; maxTick != 0 {
if tick++; tick >= maxTick {
s.router.KeepAlive()
tick = 0
}
}
}
}
}
开发者ID:YongMan,项目名称:codis,代码行数:35,代码来源:proxy.go
示例5: run
func (t *MigrateTask) run() error {
log.Infof("migration start: %+v", t.MigrateTaskInfo)
to := t.NewGroupId
t.UpdateStatus(MIGRATE_TASK_MIGRATING)
err := t.migrateSingleSlot(t.SlotId, to)
if err != nil {
log.ErrorErrorf(err, "migrate single slot failed")
t.UpdateStatus(MIGRATE_TASK_ERR)
t.rollbackPremigrate()
return err
}
t.UpdateFinish()
log.Infof("migration finished: %+v", t.MigrateTaskInfo)
return nil
}
开发者ID:YongMan,项目名称:codis,代码行数:15,代码来源:migrate_task.go
示例6: handleRequestAsking
func (s *Session) handleRequestAsking(r *Request, extra []byte) (*Request, error) {
log.Infof("ASK: handling asking request to backend")
if err := s.GetDispather().DispatchAsking(r, extra); err != nil {
return nil, err
}
return r, nil
}
开发者ID:YongMan,项目名称:codis,代码行数:7,代码来源:session.go
示例7: TestProxyOfflineInWaitActionReceiver
func TestProxyOfflineInWaitActionReceiver(t *testing.T) {
log.Infof("test proxy offline when waiting action response")
fakeZkConn := zkhelper.NewConn()
for i := 1; i <= 4; i++ {
CreateProxyInfo(fakeZkConn, productName, &ProxyInfo{
Id: strconv.Itoa(i),
State: PROXY_STATE_ONLINE,
})
go waitForProxyMarkOffline(fakeZkConn, strconv.Itoa(i))
}
lst, _ := ProxyList(fakeZkConn, productName, nil)
assert.Must(len(lst) == 4)
go func() {
time.Sleep(500 * time.Millisecond)
actionPath := path.Join(GetActionResponsePath(productName), fakeZkConn.Seq2Str(1))
//create test response for proxy 4, means proxy 1,2,3 are timeout
fakeZkConn.Create(path.Join(actionPath, "4"), nil,
0, zkhelper.DefaultFileACLs())
}()
err := NewActionWithTimeout(fakeZkConn, productName, ACTION_TYPE_SLOT_CHANGED, nil, "desc", true, 3*1000)
if err != nil {
assert.Must(err.Error() == ErrReceiverTimeout.Error())
}
for i := 1; i <= 3; i++ {
info, _ := GetProxyInfo(fakeZkConn, productName, strconv.Itoa(i))
assert.Must(info.State == PROXY_STATE_OFFLINE)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:33,代码来源:action_test.go
示例8: responseAction
func (s *Server) responseAction(seq int64) {
log.Infof("send response seq = %d", seq)
err := s.topo.DoResponse(int(seq), &s.info)
if err != nil {
log.InfoErrorf(err, "send response seq = %d failed", seq)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:7,代码来源:proxy.go
示例9: releaseDashboardNode
func releaseDashboardNode() {
zkPath := fmt.Sprintf("/zk/codis/db_%s/dashboard", globalEnv.ProductName())
if exists, _, _ := safeZkConn.Exists(zkPath); exists {
log.Infof("removing dashboard node")
safeZkConn.Delete(zkPath, 0)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:7,代码来源:dashboard.go
示例10: processAction
func (s *Server) processAction(e interface{}) {
if strings.Index(getEventPath(e), models.GetProxyPath(s.topo.ProductName)) == 0 {
info, err := s.topo.GetProxyInfo(s.info.Id)
if err != nil {
log.PanicErrorf(err, "get proxy info failed: %s", s.info.Id)
}
switch info.State {
case models.PROXY_STATE_MARK_OFFLINE:
log.Infof("mark offline, proxy got offline event: %s", s.info.Id)
s.markOffline()
case models.PROXY_STATE_ONLINE:
s.rewatchProxy()
default:
log.Panicf("unknown proxy state %v", info)
}
return
}
//re-watch
nodes := s.rewatchNodes()
seqs, err := models.ExtraSeqList(nodes)
if err != nil {
log.PanicErrorf(err, "get seq list failed")
}
if len(seqs) == 0 || !s.topo.IsChildrenChangedEvent(e) {
return
}
//get last pos
index := -1
for i, seq := range seqs {
if s.lastActionSeq < seq {
index = i
break
}
}
if index < 0 {
return
}
actions := seqs[index:]
for _, seq := range actions {
exist, err := s.topo.Exist(path.Join(s.topo.GetActionResponsePath(seq), s.info.Id))
if err != nil {
log.PanicErrorf(err, "get action failed")
}
if exist {
continue
}
if s.checkAndDoTopoChange(seq) {
s.responseAction(int64(seq))
}
}
s.lastActionSeq = seqs[len(seqs)-1]
}
开发者ID:YongMan,项目名称:codis,代码行数:59,代码来源:proxy.go
示例11: Run
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)
}
开发者ID:YongMan,项目名称:codis,代码行数:17,代码来源:backend.go
示例12: getActionObject
func (s *Server) getActionObject(seq int, target interface{}) {
act := &models.Action{Target: target}
err := s.topo.GetActionWithSeqObject(int64(seq), act)
if err != nil {
log.PanicErrorf(err, "get action object failed, seq = %d", seq)
}
log.Infof("action %+v", act)
}
开发者ID:YongMan,项目名称:codis,代码行数:8,代码来源:proxy.go
示例13: onGroupChange
func (s *Server) onGroupChange(groupId int) {
log.Infof("group changed %d", groupId)
for i, g := range s.groups {
if g == groupId {
s.fillSlot(i)
}
}
}
开发者ID:YongMan,项目名称:codis,代码行数:8,代码来源:proxy.go
示例14: NewSessionSize
func NewSessionSize(c net.Conn, auth string, bufsize int, timeout int) *Session {
s := &Session{CreateUnix: time.Now().Unix(), auth: auth}
s.Conn = redis.NewConnSize(c, bufsize)
s.Conn.ReaderTimeout = time.Second * time.Duration(timeout)
s.Conn.WriterTimeout = time.Second * 30
log.Infof("session [%p] create: %s", s, s)
return s
}
开发者ID:YongMan,项目名称:codis,代码行数:8,代码来源:session.go
示例15: New
func New(addr string, debugVarAddr string, conf *Config) *Server {
log.Infof("create proxy with config: %+v", conf)
proxyHost := strings.Split(addr, ":")[0]
debugHost := strings.Split(debugVarAddr, ":")[0]
hostname, err := os.Hostname()
if err != nil {
log.PanicErrorf(err, "get host name failed")
}
if proxyHost == "0.0.0.0" || strings.HasPrefix(proxyHost, "127.0.0.") || proxyHost == "" {
proxyHost = hostname
}
if debugHost == "0.0.0.0" || strings.HasPrefix(debugHost, "127.0.0.") || debugHost == "" {
debugHost = hostname
}
s := &Server{conf: conf, lastActionSeq: -1, groups: make(map[int]int)}
s.topo = NewTopo(conf.productName, conf.zkAddr, conf.fact, conf.provider, conf.zkSessionTimeout)
s.info.Id = conf.proxyId
s.info.State = models.PROXY_STATE_OFFLINE
s.info.Addr = proxyHost + ":" + strings.Split(addr, ":")[1]
s.info.DebugVarAddr = debugHost + ":" + strings.Split(debugVarAddr, ":")[1]
s.info.Pid = os.Getpid()
s.info.StartAt = time.Now().String()
s.kill = make(chan interface{})
log.Infof("proxy info = %+v", s.info)
if l, err := net.Listen(conf.proto, addr); err != nil {
log.PanicErrorf(err, "open listener failed")
} else {
s.listener = l
}
s.router = router.NewWithAuth(conf.passwd)
s.evtbus = make(chan interface{}, 1024)
s.register()
s.wait.Add(1)
go func() {
defer s.wait.Done()
s.serve()
}()
return s
}
开发者ID:YongMan,项目名称:codis,代码行数:46,代码来源:proxy.go
示例16: prepareAsk
func (s *Slot) prepareAsk(r *Request) (*SharedBackendConn, error) {
if s.migrate.bc == nil {
log.Infof("ASK: slot-%04d is not migrating", s.id)
return nil, ErrSlotIsNotMigrating
}
r.slot = &s.wait
r.slot.Add(1)
return s.migrate.bc, nil
}
开发者ID:YongMan,项目名称:codis,代码行数:9,代码来源:slots.go
示例17: rollbackPremigrate
func (t *MigrateTask) rollbackPremigrate() {
if s, err := models.GetSlot(t.zkConn, t.productName, t.SlotId); err == nil && s.State.Status == models.SLOT_STATUS_PRE_MIGRATE {
s.State.Status = models.SLOT_STATUS_ONLINE
err = s.Update(t.zkConn)
if err != nil {
log.Warn("rollback premigrate failed", err)
} else {
log.Infof("rollback slot %d from premigrate to online\n", s.Id)
}
}
}
开发者ID:YongMan,项目名称:codis,代码行数:11,代码来源:migrate_task.go
示例18: onSlotRangeChange
func (s *Server) onSlotRangeChange(param *models.SlotMultiSetParam) {
log.Infof("slotRangeChange %+v", param)
for i := param.From; i <= param.To; i++ {
switch param.Status {
case models.SLOT_STATUS_OFFLINE:
s.resetSlot(i)
case models.SLOT_STATUS_ONLINE:
s.fillSlot(i)
default:
log.Panicf("can not handle status %v", param.Status)
}
}
}
开发者ID:YongMan,项目名称:codis,代码行数:13,代码来源:proxy.go
示例19: fillSlot
func (s *Router) fillSlot(i int, addr, from string, lock bool) {
if !s.isValidSlot(i) {
return
}
slot := s.slots[i]
slot.blockAndWait()
s.putBackendConn(slot.backend.bc)
s.putBackendConn(slot.migrate.bc)
slot.reset()
if len(addr) != 0 {
xx := strings.Split(addr, ":")
if len(xx) >= 1 {
slot.backend.host = []byte(xx[0])
}
if len(xx) >= 2 {
slot.backend.port = []byte(xx[1])
}
slot.backend.addr = addr
slot.backend.bc = s.getBackendConn(addr)
}
if len(from) != 0 {
slot.migrate.from = from
slot.migrate.bc = s.getBackendConn(from)
}
if !lock {
slot.unblock()
}
if slot.migrate.bc != nil {
log.Infof("fill slot %04d, backend.addr = %s, migrate.from = %s",
i, slot.backend.addr, slot.migrate.from)
} else {
log.Infof("fill slot %04d, backend.addr = %s",
i, slot.backend.addr)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:39,代码来源:router.go
示例20: Serve
func (s *Session) Serve(d Dispatcher, maxPipeline int) {
if d == nil {
log.Infof("dispatcher is nil")
return
}
// set dispacher for this session
s.SetDispather(d)
var errlist errors.ErrorList
defer func() {
if err := errlist.First(); err != nil {
log.Infof("session [%p] closed: %s, error = %s", s, s, err)
} else {
log.Infof("session [%p] closed: %s, quit", s, s)
}
}()
tasks := make(chan *Request, maxPipeline)
s.SetTasks(tasks)
go func() {
defer func() {
s.Close()
for _ = range tasks {
}
}()
if err := s.loopWriter(tasks); err != nil {
errlist.PushBack(err)
}
}()
defer func(tasks chan<- *Request) {
close(tasks)
s.SetTasks(nil)
}(tasks)
if err := s.loopReader(tasks); err != nil {
errlist.PushBack(err)
}
}
开发者ID:YongMan,项目名称:codis,代码行数:39,代码来源:session.go
注:本文中的github.com/YongMan/codis/pkg/utils/log.Infof函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论