mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
Travis seems to be having issues pulling deps, so we'll have to check in the vendor directory and prevent the makefile from trying to regenerate it normally.
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Flow control
|
|
|
|
package http2
|
|
|
|
// flow is the flow control window's size.
|
|
type flow struct {
|
|
// n is the number of DATA bytes we're allowed to send.
|
|
// A flow is kept both on a conn and a per-stream.
|
|
n int32
|
|
|
|
// conn points to the shared connection-level flow that is
|
|
// shared by all streams on that conn. It is nil for the flow
|
|
// that's on the conn directly.
|
|
conn *flow
|
|
}
|
|
|
|
func (f *flow) setConnFlow(cf *flow) { f.conn = cf }
|
|
|
|
func (f *flow) available() int32 {
|
|
n := f.n
|
|
if f.conn != nil && f.conn.n < n {
|
|
n = f.conn.n
|
|
}
|
|
return n
|
|
}
|
|
|
|
func (f *flow) take(n int32) {
|
|
if n > f.available() {
|
|
panic("internal error: took too much")
|
|
}
|
|
f.n -= n
|
|
if f.conn != nil {
|
|
f.conn.n -= n
|
|
}
|
|
}
|
|
|
|
// add adds n bytes (positive or negative) to the flow control window.
|
|
// It returns false if the sum would exceed 2^31-1.
|
|
func (f *flow) add(n int32) bool {
|
|
remain := (1<<31 - 1) - f.n
|
|
if n > remain {
|
|
return false
|
|
}
|
|
f.n += n
|
|
return true
|
|
}
|