修复设置抓包率引起的查询时间异常的问题

This commit is contained in:
hebo 2019-11-14 21:52:19 +08:00
parent 16722c878c
commit 85bef28022
2 changed files with 20 additions and 18 deletions

View File

@ -28,6 +28,7 @@ func NewCoverRanges() *coverRanges {
return &coverRanges{ return &coverRanges{
head: &coverageNode{ head: &coverageNode{
begin: -1, begin: -1,
end: -1,
}, },
} }
} }
@ -52,10 +53,9 @@ func (crs *coverRanges) addRange(node *coverageNode) {
node.next = checkRange node.next = checkRange
node = nil node = nil
break break
} else {
currRange = checkRange
} }
currRange = checkRange
} }
if node != nil && currRange != nil { if node != nil && currRange != nil {
@ -70,7 +70,7 @@ func (crs *coverRanges) mergeRanges() {
currRange := crs.head.next currRange := crs.head.next
for currRange != nil && currRange.next != nil { for currRange != nil && currRange.next != nil {
checkRange := currRange.next checkRange := currRange.next
if currRange.end >= checkRange.begin && currRange.end < checkRange.end { if currRange.begin <= checkRange.begin && currRange.end >= checkRange.begin && currRange.end < checkRange.end {
currRange.end = checkRange.end currRange.end = checkRange.end
currRange.next = checkRange.next currRange.next = checkRange.next
checkRange.Recovery() checkRange.Recovery()
@ -81,12 +81,10 @@ func (crs *coverRanges) mergeRanges() {
} }
} }
type coveragePool struct { type coveragePool struct {
queue chan *coverageNode queue chan *coverageNode
} }
func NewCoveragePool() (cp *coveragePool) { func NewCoveragePool() (cp *coveragePool) {
return &coveragePool{ return &coveragePool{
queue: make(chan *coverageNode, 256), queue: make(chan *coverageNode, 256),

View File

@ -87,7 +87,7 @@ func (ms *MysqlSession) ReceiveTCPPacket(newPkt *model.TCPPacket) {
ms.readFromClient(newPkt.Seq, newPkt.Payload) ms.readFromClient(newPkt.Seq, newPkt.Payload)
} else { } else {
ms.readFromServer(newPkt.Payload) ms.readFromServer(newPkt.Seq, newPkt.Payload)
qp := ms.GenerateQueryPiece() qp := ms.GenerateQueryPiece()
if qp != nil { if qp != nil {
ms.queryPieceReceiver <- qp ms.queryPieceReceiver <- qp
@ -99,7 +99,7 @@ func (ms *MysqlSession) resetBeginTime() {
ms.stmtBeginTime = time.Now().UnixNano() / millSecondUnit ms.stmtBeginTime = time.Now().UnixNano() / millSecondUnit
} }
func (ms *MysqlSession) readFromServer(bytes []byte) { func (ms *MysqlSession) readFromServer(respSeq int64, bytes []byte) {
if ms.expectSendSize < 1 && len(bytes) > 4 { if ms.expectSendSize < 1 && len(bytes) > 4 {
ms.expectSendSize = extractMysqlPayloadSize(bytes[:4]) ms.expectSendSize = extractMysqlPayloadSize(bytes[:4])
contents := bytes[4:] contents := bytes[4:]
@ -107,6 +107,10 @@ func (ms *MysqlSession) readFromServer(bytes []byte) {
ms.prepareInfo.prepareStmtID = bytesToInt(contents[1:5]) ms.prepareInfo.prepareStmtID = bytesToInt(contents[1:5])
} }
} }
if ms.coverRanges.head.next == nil || ms.coverRanges.head.next.end != respSeq {
ms.clear()
}
} }
func (ms *MysqlSession) checkFinish() bool { func (ms *MysqlSession) checkFinish() bool {