perf(cmpp): process inbound submits within client window
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"log"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -30,6 +31,8 @@ type downstreamSession struct {
|
||||
applicationID string
|
||||
enterpriseCode string
|
||||
protocol string
|
||||
windowSize int
|
||||
submitInFlight *atomic.Int64
|
||||
srcID string
|
||||
phoneNumber string
|
||||
gatewayMsgID uint64
|
||||
@@ -123,6 +126,39 @@ func findSessionByConn(conn *cmpp.Conn) *downstreamSession {
|
||||
return downstreamRegistry.byConn[conn]
|
||||
}
|
||||
|
||||
func submitWindowByConn(conn *cmpp.Conn) int {
|
||||
session := findSessionByConn(conn)
|
||||
if session == nil || session.windowSize < 1 {
|
||||
return 1
|
||||
}
|
||||
return session.windowSize
|
||||
}
|
||||
|
||||
func beginInboundSubmit(session *downstreamSession) func() {
|
||||
if session == nil || session.submitInFlight == nil {
|
||||
return func() {}
|
||||
}
|
||||
session.submitInFlight.Add(1)
|
||||
return func() { session.submitInFlight.Add(-1) }
|
||||
}
|
||||
|
||||
func SubmitSlotSnapshot() (int, int64) {
|
||||
downstreamRegistry.RLock()
|
||||
defer downstreamRegistry.RUnlock()
|
||||
configured := 0
|
||||
var inFlight int64
|
||||
for _, session := range downstreamRegistry.byConn {
|
||||
if session == nil {
|
||||
continue
|
||||
}
|
||||
configured += max(1, session.windowSize)
|
||||
if session.submitInFlight != nil {
|
||||
inFlight += session.submitInFlight.Load()
|
||||
}
|
||||
}
|
||||
return configured, inFlight
|
||||
}
|
||||
|
||||
func rememberDownstream(session downstreamSession) {
|
||||
if session.messageID == "" || session.conn == nil {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user