mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-27 09:14:44 +08:00
优化代码规范
This commit is contained in:
100
rpc/callset.go
100
rpc/callset.go
@@ -3,11 +3,11 @@ package rpc
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/duanhf2012/origin/v2/log"
|
||||
"strconv"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"github.com/duanhf2012/origin/v2/log"
|
||||
)
|
||||
|
||||
type CallSet struct {
|
||||
@@ -20,12 +20,10 @@ type CallSet struct {
|
||||
callTimerHeap CallTimerHeap
|
||||
}
|
||||
|
||||
|
||||
|
||||
func (cs *CallSet) Init(){
|
||||
func (cs *CallSet) Init() {
|
||||
cs.pendingLock.Lock()
|
||||
cs.callTimerHeap.Init()
|
||||
cs.pending = make(map[uint64]*Call,4096)
|
||||
cs.pending = make(map[uint64]*Call, 4096)
|
||||
|
||||
cs.maxCheckCallRpcCount = DefaultMaxCheckCallRpcCount
|
||||
cs.callRpcTimeout = DefaultRpcTimeout
|
||||
@@ -34,7 +32,7 @@ func (cs *CallSet) Init(){
|
||||
cs.pendingLock.Unlock()
|
||||
}
|
||||
|
||||
func (bc *CallSet) makeCallFail(call *Call) {
|
||||
func (cs *CallSet) makeCallFail(call *Call) {
|
||||
if call.callback != nil && call.callback.IsValid() {
|
||||
call.rpcHandler.PushRpcResponse(call)
|
||||
} else {
|
||||
@@ -42,105 +40,105 @@ func (bc *CallSet) makeCallFail(call *Call) {
|
||||
}
|
||||
}
|
||||
|
||||
func (bc *CallSet) checkRpcCallTimeout() {
|
||||
for{
|
||||
func (cs *CallSet) checkRpcCallTimeout() {
|
||||
for {
|
||||
time.Sleep(DefaultCheckRpcCallTimeoutInterval)
|
||||
for i := 0; i < bc.maxCheckCallRpcCount; i++ {
|
||||
bc.pendingLock.Lock()
|
||||
for i := 0; i < cs.maxCheckCallRpcCount; i++ {
|
||||
cs.pendingLock.Lock()
|
||||
|
||||
callSeq := bc.callTimerHeap.PopTimeout()
|
||||
callSeq := cs.callTimerHeap.PopTimeout()
|
||||
if callSeq == 0 {
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Unlock()
|
||||
break
|
||||
}
|
||||
|
||||
pCall := bc.pending[callSeq]
|
||||
pCall := cs.pending[callSeq]
|
||||
if pCall == nil {
|
||||
bc.pendingLock.Unlock()
|
||||
log.Error("call seq is not find",log.Uint64("seq", callSeq))
|
||||
cs.pendingLock.Unlock()
|
||||
log.Error("call seq is not find", log.Uint64("seq", callSeq))
|
||||
continue
|
||||
}
|
||||
|
||||
delete(bc.pending,callSeq)
|
||||
delete(cs.pending, callSeq)
|
||||
strTimeout := strconv.FormatInt(int64(pCall.TimeOut.Seconds()), 10)
|
||||
pCall.Err = errors.New("RPC call takes more than " + strTimeout + " seconds,method is "+pCall.ServiceMethod)
|
||||
log.Error("call timeout",log.String("error",pCall.Err.Error()))
|
||||
bc.makeCallFail(pCall)
|
||||
bc.pendingLock.Unlock()
|
||||
pCall.Err = errors.New("RPC call takes more than " + strTimeout + " seconds,method is " + pCall.ServiceMethod)
|
||||
log.Error("call timeout", log.String("error", pCall.Err.Error()))
|
||||
cs.makeCallFail(pCall)
|
||||
cs.pendingLock.Unlock()
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (bc *CallSet) AddPending(call *Call) {
|
||||
bc.pendingLock.Lock()
|
||||
func (cs *CallSet) AddPending(call *Call) {
|
||||
cs.pendingLock.Lock()
|
||||
|
||||
if call.Seq == 0 {
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Unlock()
|
||||
log.Stack("call is error.")
|
||||
return
|
||||
}
|
||||
|
||||
bc.pending[call.Seq] = call
|
||||
bc.callTimerHeap.AddTimer(call.Seq,call.TimeOut)
|
||||
cs.pending[call.Seq] = call
|
||||
cs.callTimerHeap.AddTimer(call.Seq, call.TimeOut)
|
||||
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Unlock()
|
||||
}
|
||||
|
||||
func (bc *CallSet) RemovePending(seq uint64) *Call {
|
||||
if seq == 0 {
|
||||
func (cs *CallSet) RemovePending(seq uint64) *Call {
|
||||
if seq == 0 {
|
||||
return nil
|
||||
}
|
||||
bc.pendingLock.Lock()
|
||||
call := bc.removePending(seq)
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Lock()
|
||||
call := cs.removePending(seq)
|
||||
cs.pendingLock.Unlock()
|
||||
return call
|
||||
}
|
||||
|
||||
func (bc *CallSet) removePending(seq uint64) *Call {
|
||||
v, ok := bc.pending[seq]
|
||||
func (cs *CallSet) removePending(seq uint64) *Call {
|
||||
v, ok := cs.pending[seq]
|
||||
if ok == false {
|
||||
return nil
|
||||
}
|
||||
|
||||
bc.callTimerHeap.Cancel(seq)
|
||||
delete(bc.pending, seq)
|
||||
cs.callTimerHeap.Cancel(seq)
|
||||
delete(cs.pending, seq)
|
||||
return v
|
||||
}
|
||||
|
||||
func (bc *CallSet) FindPending(seq uint64) (pCall *Call) {
|
||||
func (cs *CallSet) FindPending(seq uint64) (pCall *Call) {
|
||||
if seq == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
bc.pendingLock.Lock()
|
||||
pCall = bc.pending[seq]
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Lock()
|
||||
pCall = cs.pending[seq]
|
||||
cs.pendingLock.Unlock()
|
||||
|
||||
return pCall
|
||||
}
|
||||
|
||||
func (bc *CallSet) cleanPending(){
|
||||
bc.pendingLock.Lock()
|
||||
for {
|
||||
callSeq := bc.callTimerHeap.PopFirst()
|
||||
func (cs *CallSet) cleanPending() {
|
||||
cs.pendingLock.Lock()
|
||||
for {
|
||||
callSeq := cs.callTimerHeap.PopFirst()
|
||||
if callSeq == 0 {
|
||||
break
|
||||
}
|
||||
pCall := bc.pending[callSeq]
|
||||
pCall := cs.pending[callSeq]
|
||||
if pCall == nil {
|
||||
log.Error("call Seq is not find",log.Uint64("seq",callSeq))
|
||||
log.Error("call Seq is not find", log.Uint64("seq", callSeq))
|
||||
continue
|
||||
}
|
||||
|
||||
delete(bc.pending,callSeq)
|
||||
pCall.Err = errors.New("nodeid is disconnect ")
|
||||
bc.makeCallFail(pCall)
|
||||
delete(cs.pending, callSeq)
|
||||
pCall.Err = errors.New("node is disconnect ")
|
||||
cs.makeCallFail(pCall)
|
||||
}
|
||||
|
||||
bc.pendingLock.Unlock()
|
||||
cs.pendingLock.Unlock()
|
||||
}
|
||||
|
||||
func (bc *CallSet) generateSeq() uint64 {
|
||||
return atomic.AddUint64(&bc.startSeq, 1)
|
||||
func (cs *CallSet) generateSeq() uint64 {
|
||||
return atomic.AddUint64(&cs.startSeq, 1)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user