修复代理与日志链路的可靠性问题
This commit is contained in:
+18
-1
@@ -8,12 +8,29 @@ import (
|
||||
|
||||
type sseEventTracker struct {
|
||||
buf []byte
|
||||
limit int
|
||||
overflow bool
|
||||
recognized bool
|
||||
terminal bool
|
||||
afterTerminal bool
|
||||
}
|
||||
|
||||
func newSSEEventTracker(limit int64) sseEventTracker {
|
||||
if limit > int64(^uint(0)>>1) {
|
||||
limit = int64(^uint(0) >> 1)
|
||||
}
|
||||
return sseEventTracker{limit: int(limit)}
|
||||
}
|
||||
|
||||
func (t *sseEventTracker) Write(p []byte) {
|
||||
if t.overflow {
|
||||
return
|
||||
}
|
||||
if t.limit > 0 && len(p) > t.limit-len(t.buf) {
|
||||
t.buf = nil
|
||||
t.overflow = true
|
||||
return
|
||||
}
|
||||
t.buf = append(t.buf, p...)
|
||||
for {
|
||||
end, separator := completeSSEEvent(t.buf)
|
||||
@@ -34,7 +51,7 @@ func (t *sseEventTracker) Write(p []byte) {
|
||||
}
|
||||
|
||||
func (t *sseEventTracker) Complete() bool {
|
||||
return len(t.buf) == 0 && !t.afterTerminal && (!t.recognized || t.terminal)
|
||||
return !t.overflow && len(t.buf) == 0 && !t.afterTerminal && (!t.recognized || t.terminal)
|
||||
}
|
||||
|
||||
func completeSSEEvent(buf []byte) (int, int) {
|
||||
|
||||
Reference in New Issue
Block a user