本文整理匯總了Golang中github.com/ngaut/log.Warning函數的典型用法代碼示例。如果您正苦於以下問題:Golang Warning函數的具體用法?Golang Warning怎麽用?Golang Warning使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Warning函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: WritingLoop
func (s *session) WritingLoop() {
s.lastUnsentResponseSeq = 1
for {
select {
case resp, ok := <-s.backQ:
if !ok {
s.Close()
s.closeSignal.Done()
return
}
flush, err := s.handleResponse(resp)
if err != nil {
log.Warning(s.RemoteAddr(), resp.ctx, errors.ErrorStack(err))
s.Close() //notify reader to exit
continue
}
if flush && len(s.backQ) == 0 {
err := s.w.Flush()
if err != nil {
s.Close() //notify reader to exit
log.Warning(s.RemoteAddr(), resp.ctx, errors.ErrorStack(err))
continue
}
}
}
}
}
示例2: apiPromoteServer
func apiPromoteServer(server models.Server, param martini.Params) (int, string) {
conn := CreateCoordConn()
defer conn.Close()
lock := utils.GetCoordLock(conn, globalEnv.ProductName())
lock.Lock(fmt.Sprintf("promote server %+v", server))
defer func() {
err := lock.Unlock()
if err != nil {
log.Warning(err)
}
}()
group, err := models.GetGroup(conn, globalEnv.ProductName(), server.GroupId)
if err != nil {
log.Warning(err)
return 500, err.Error()
}
err = group.Promote(conn, server.Addr, globalEnv.StoreAuth())
if err != nil {
log.Warning(errors.ErrorStack(err))
log.Warning(err)
return 500, err.Error()
}
return jsonRetSucc()
}
示例3: apiAddServerGroup
// create new server group
func apiAddServerGroup(newGroup models.ServerGroup) (int, string) {
conn := CreateCoordConn()
defer conn.Close()
lock := utils.GetCoordLock(conn, globalEnv.ProductName())
lock.Lock(fmt.Sprintf("add group %+v", newGroup))
defer func() {
err := lock.Unlock()
if err != nil {
log.Warning(err)
}
}()
newGroup.ProductName = globalEnv.ProductName()
exists, err := newGroup.Exists(conn)
if err != nil {
log.Warning(err)
return 500, err.Error()
}
if exists {
return 500, "group already exists"
}
err = newGroup.Create(conn)
if err != nil {
log.Warning(err)
return 500, err.Error()
}
return jsonRetSucc()
}
示例4: apiSlotRangeSet
func apiSlotRangeSet(task RangeSetTask) (int, string) {
conn := CreateCoordConn()
defer conn.Close()
lock := utils.GetCoordLock(conn, globalEnv.ProductName())
lock.Lock(fmt.Sprintf("set slot range, %+v", task))
defer func() {
err := lock.Unlock()
if err != nil {
log.Warning(err)
}
}()
// default set online
if len(task.Status) == 0 {
task.Status = string(models.SLOT_STATUS_ONLINE)
}
err := models.SetSlotRange(conn, globalEnv.ProductName(), task.FromSlot, task.ToSlot, task.NewGroupId, models.SlotStatus(task.Status))
if err != nil {
log.Warning(err)
return 500, err.Error()
}
return jsonRetSucc()
}
示例5: Rebalance
// experimental simple auto rebalance :)
func Rebalance(coordConn zkhelper.Conn, delay int) error {
targetQuota, err := getQuotaMap(coordConn)
if err != nil {
return errors.Trace(err)
}
livingNodes, err := getLivingNodeInfos(coordConn)
if err != nil {
return errors.Trace(err)
}
log.Info("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
t := NewMigrateTask(MigrateTaskInfo{
Delay: delay,
FromSlot: slot,
ToSlot: slot,
NewGroupId: dest.GroupId,
Status: MIGRATE_TASK_MIGRATING,
CreateAt: strconv.FormatInt(time.Now().Unix(), 10),
})
u, err := uuid.NewV4()
if err != nil {
return errors.Trace(err)
}
t.Id = u.String()
if ok, err := preMigrateCheck(t); ok {
// do migrate
err := t.run()
if err != nil {
log.Warning(err)
return errors.Trace(err)
}
} else {
log.Warning(err)
return errors.Trace(err)
}
node.CurSlots = node.CurSlots[0 : len(node.CurSlots)-1]
dest.CurSlots = append(dest.CurSlots, slot)
}
}
}
}
log.Info("rebalance finish")
return nil
}
示例6: apiGetRedisSlotInfoFromGroupId
func apiGetRedisSlotInfoFromGroupId(param martini.Params) (int, string) {
groupId, err := strconv.Atoi(param["group_id"])
if err != nil {
log.Warning(err)
return 500, err.Error()
}
slotId, err := strconv.Atoi(param["slot_id"])
if err != nil {
log.Warning(err)
return 500, err.Error()
}
conn := CreateCoordConn()
defer conn.Close()
g, err := models.GetGroup(conn, globalEnv.ProductName(), groupId)
if err != nil {
log.Warning(err)
return 500, err.Error()
}
s, err := g.Master(conn)
if err != nil {
log.Warning(err)
return 500, err.Error()
}
if s == nil {
return 500, "master not found"
}
slotInfo, err := utils.SlotsInfo(s.Addr, slotId, slotId, globalEnv.StoreAuth())
if err != nil {
log.Warning(err)
return 500, err.Error()
}
out, _ := json.MarshalIndent(map[string]interface{}{
"keys": slotInfo[slotId],
"slot_id": slotId,
"group_id": groupId,
"addr": s.Addr,
}, " ", " ")
return 200, string(out)
}
示例7: writeloop
func (tr *taskRunner) writeloop() {
var err error
tick := time.Tick(2 * time.Second)
for {
if tr.closed && tr.tasks.Len() == 0 {
log.Warning("exit taskrunner", tr.redisAddr)
tr.wgClose.Done()
tr.c.Close()
return
}
if err != nil { //clean up
err = tr.tryRecover(err)
if err != nil {
continue
}
}
select {
case t := <-tr.in:
tr.processTask(t)
case resp := <-tr.out:
err = tr.handleResponse(resp)
case <-tick:
if tr.tasks.Len() > 0 && int(time.Since(tr.latest).Seconds()) > tr.netTimeout {
tr.c.Close()
}
}
}
}
示例8: main
func main() {
tso := &TimestampOracle{
ticker: time.NewTicker(10 * time.Millisecond),
}
current := &atomicObject{
physical: time.Now(),
}
tso.ts.Store(current)
go tso.updateTicker()
go http.ListenAndServe(":5555", nil)
ln, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal(err)
}
for {
conn, err := ln.Accept()
if err != nil {
log.Warning(err)
continue
// handle error
}
s := &session{
r: bufio.NewReaderSize(conn, 8192),
w: bufio.NewWriterSize(conn, 8192),
conn: conn,
}
go tso.handleConnection(s)
}
}
示例9: apiInitSlots
func apiInitSlots(r *http.Request) (int, string) {
r.ParseForm()
isForce := false
val := r.FormValue("is_force")
if len(val) > 0 && (val == "1" || val == "true") {
isForce = true
}
conn := CreateCoordConn()
defer conn.Close()
if !isForce {
s, _ := models.Slots(conn, globalEnv.ProductName())
if len(s) > 0 {
return 500, "slots already initialized, you may use 'is_force' flag and try again."
}
}
if err := models.InitSlotSet(conn, globalEnv.ProductName(), models.DEFAULT_SLOT_NUM); err != nil {
log.Warning(err)
return 500, err.Error()
}
return jsonRetSucc()
}
示例10: jsonRet
func jsonRet(output map[string]interface{}) (int, string) {
b, err := json.Marshal(output)
if err != nil {
log.Warning(err)
}
return 200, string(b)
}
示例11: apiActionGC
// actions
func apiActionGC(r *http.Request) (int, string) {
r.ParseForm()
keep, _ := strconv.Atoi(r.FormValue("keep"))
secs, _ := strconv.Atoi(r.FormValue("secs"))
conn := CreateCoordConn()
defer conn.Close()
lock := utils.GetCoordLock(conn, globalEnv.ProductName())
lock.Lock(fmt.Sprintf("action gc"))
defer func() {
err := lock.Unlock()
if err != nil {
log.Warning(err)
}
}()
var err error
if keep >= 0 {
err = models.ActionGC(conn, globalEnv.ProductName(), models.GC_TYPE_N, keep)
} else if secs > 0 {
err = models.ActionGC(conn, globalEnv.ProductName(), models.GC_TYPE_SEC, secs)
}
if err != nil {
return 500, err.Error()
}
return jsonRetSucc()
}
示例12: Serve
func (s *Server) Serve() error {
log.Debug("this is ddbatman v4")
s.running = true
var sessionId int64 = 0
for s.running {
select {
case sessionChan <- sessionId:
//do nothing
default:
//warnning!
log.Warnf("TASK_CHANNEL is full!")
}
conn, err := s.Accept()
if err != nil {
log.Warning("accept error %s", err.Error())
continue
}
//allocate a sessionId for a session
go s.onConn(conn)
sessionId += 1
}
if s.restart == true {
log.Debug("Begin to restart graceful")
listenerFile, err := s.listener.(*net.TCPListener).File()
if err != nil {
log.Fatal("Fail to get socket file descriptor:", err)
}
listenerFd := listenerFile.Fd()
os.Setenv("_GRACEFUL_RESTART", "true")
execSpec := &syscall.ProcAttr{
Env: os.Environ(),
Files: []uintptr{os.Stdin.Fd(), os.Stdout.Fd(), os.Stderr.Fd(), listenerFd},
}
fork, err := syscall.ForkExec(os.Args[0], os.Args, execSpec)
if err != nil {
return fmt.Errorf("failed to forkexec: %v", err)
}
log.Infof("start new process success, pid %d.", fork)
}
timeout := time.NewTimer(time.Minute)
wait := make(chan struct{})
go func() {
s.wg.Wait()
wait <- struct{}{}
}()
select {
case <-timeout.C:
log.Error("server : Waittimeout error when close the service")
return nil
case <-wait:
log.Info("server : all goroutine has been done")
return nil
}
return nil
}
示例13: tryRecover
func (tr *taskRunner) tryRecover(err error) error {
log.Warning("try recover from ", err)
tr.cleanupOutgoingTasks(err)
//try to recover
c, err := newRedisConn(tr.redisAddr, tr.netTimeout, PipelineBufSize, PipelineBufSize, tr.auth)
if err != nil {
tr.cleanupQueueTasks() //do not block dispatcher
log.Warning(err)
time.Sleep(1 * time.Second)
return errors.Trace(err)
}
tr.c = c
go tr.readloop()
return nil
}
示例14: Put
func (c *Cache) Put(x interface{}) {
c.mu.Lock()
if len(c.saved) < cap(c.saved) {
c.saved = append(c.saved, x)
} else {
log.Warning(c.name, "is full, you may need to increase pool size")
}
c.mu.Unlock()
}
示例15: OnGroupChange
func (s *Server) OnGroupChange(groupId int) {
log.Warning("group changed", groupId)
for i, slot := range s.slots {
if slot.slotInfo.GroupId == groupId {
s.fillSlot(i, true)
}
}
}