fix(notify): 根治低带宽控制面阻塞与传输写入卡死
- 为控制消息增加优先级、公平调度、队列字节预算和自适应批处理 - 支持可取消的写门等待,收紧 shared/dedicated bulk、stream 和 Reply 写入边界 - 修复 bulk reset/close、连接 handoff 和安全 profile 切换时序 - 保留旧取消与超时错误契约,新增阶段化 TransportSendError - 增加 ReplyCtx、ReplyObjCtx、写超时配置及黑洞连接和竞态回归测试
This commit is contained in:
@@ -671,6 +671,21 @@ func (s *streamHandle) CloseWrite() error {
|
||||
return s.close(false)
|
||||
}
|
||||
|
||||
func (s *streamHandle) newControlContext() (context.Context, func(), error) {
|
||||
if s == nil {
|
||||
return nil, func() {}, io.ErrClosedPipe
|
||||
}
|
||||
s.mu.Lock()
|
||||
parent := context.Background()
|
||||
writeTimeout := s.writeTimeout
|
||||
s.mu.Unlock()
|
||||
ctx, cancel, _, err := s.newWriteContext(parent, writeTimeout)
|
||||
if err != nil {
|
||||
return nil, func() {}, err
|
||||
}
|
||||
return ctx, cancel, nil
|
||||
}
|
||||
|
||||
func (s *streamHandle) close(full bool) error {
|
||||
if s == nil {
|
||||
return nil
|
||||
@@ -692,7 +707,12 @@ func (s *streamHandle) close(full bool) error {
|
||||
s.mu.Unlock()
|
||||
|
||||
if closeFn != nil {
|
||||
if err := closeFn(context.Background(), s, true); err != nil && !errors.Is(err, errStreamNotFound) {
|
||||
ctx, cancel, err := s.newControlContext()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
if err := closeFn(ctx, s, true); err != nil && !errors.Is(err, errStreamNotFound) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -716,7 +736,12 @@ func (s *streamHandle) close(full bool) error {
|
||||
s.mu.Unlock()
|
||||
|
||||
if closeFn != nil {
|
||||
if err := closeFn(context.Background(), s, full); err != nil && !errors.Is(err, errStreamNotFound) {
|
||||
ctx, cancel, err := s.newControlContext()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
if err := closeFn(ctx, s, full); err != nil && !errors.Is(err, errStreamNotFound) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -758,7 +783,12 @@ func (s *streamHandle) Reset(err error) error {
|
||||
s.mu.Unlock()
|
||||
|
||||
if resetFn != nil {
|
||||
if sendErr := resetFn(context.Background(), s, streamResetMessage(resetErr)); sendErr != nil {
|
||||
ctx, cancel, err := s.newControlContext()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
if sendErr := resetFn(ctx, s, streamResetMessage(resetErr)); sendErr != nil {
|
||||
return sendErr
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user