mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(access): limit writer in pipe
@formatter:off Signed-off-by: slasher <shenjie1@oppo.com>
This commit is contained in:
parent
e286733d88
commit
6b2e7926be
@ -118,20 +118,20 @@ type Writer struct {
|
||||
var _ io.Writer = &Writer{}
|
||||
|
||||
func (w *Writer) Write(p []byte) (n int, err error) {
|
||||
n, err = w.underlying.Write(p)
|
||||
|
||||
now := time.Now()
|
||||
reserve := w.rate.ReserveN(now, n)
|
||||
reserve := w.rate.ReserveN(now, len(p))
|
||||
|
||||
// Wait if necessary
|
||||
delay := reserve.DelayFrom(now)
|
||||
if delay == 0 {
|
||||
n, err = w.underlying.Write(p)
|
||||
return
|
||||
}
|
||||
|
||||
span := trace.SpanFromContextSafe(w.ctx)
|
||||
if !reserve.OK() {
|
||||
span.Warnf("writer exceeds limiter n:%d, burst:%d", n, w.rate.Burst())
|
||||
span.Warnf("writer exceeds limiter n:%d, burst:%d", len(p), w.rate.Burst())
|
||||
n, err = w.underlying.Write(p)
|
||||
return
|
||||
}
|
||||
t := time.NewTimer(delay)
|
||||
@ -143,6 +143,7 @@ func (w *Writer) Write(p []byte) (n int, err error) {
|
||||
select {
|
||||
case <-t.C:
|
||||
// We can proceed.
|
||||
n, err = w.underlying.Write(p)
|
||||
return
|
||||
case <-w.ctx.Done():
|
||||
// Context was canceled before we could proceed. Cancel the
|
||||
|
||||
Loading…
Reference in New Issue
Block a user