internal/api/admission.go
internal/api · 121 lines · 10 declarations · source
Declarations
type Admission
type Admission struct {
mu sync.Mutex
workLimit, projectLimit, credentialLimit, authLimit int
work, auth, audit int
projects, credentials map[string]int
updated time.Time
tokens float64
refused, accepted, auditSuppressed uint64
}
Admission bounds this process's HTTP work. It never queues requests, stores raw credentials or retains inactive project keys. Multiple API processes have independent gates; deployment-wide backlog capacity and upstream denial-of-service protection remain separate controls.
const authRequestsPerSecond
const authRequestsPerSecond = 128
const authRequestBurst
const authRequestBurst = 256
func NewAdmission
func NewAdmission(memoryConnections, registryConnections int32) (*Admission, error)
NewAdmission reserves one memory connection outside HTTP work and limits each project to at most half of the remaining slots. Credential rotation cannot evade the project bound. Pool capacities below three cannot reserve room for another project and background work.
method Admission.authenticate
func (a *Admission) authenticate(now time.Time) (func(), bool)
method Admission.acquire
func (a *Admission) acquire(project, credential string) (func(), bool)
method Admission.acquireAudit
func (a *Admission) acquireAudit() (func(), bool)
Anonymous audit shares the memory-work ceiling, with at most one audit write at once. Failing to acquire is best-effort audit suppression, not a reason to queue or block authentication.
type AdmissionStats
type AdmissionStats struct {
Accepted, Refused uint64
ActiveRequests, ActiveAuthentication int
AuditSuppressed uint64
}
AdmissionStats contains fixed aggregate fields only, suitable for operator logs without introducing a metric series for each project, credential or attacker-supplied header.
method Admission.Stats
func (a *Admission) Stats() AdmissionStats
func writeAdmissionRefusal
func writeAdmissionRefusal(w http.ResponseWriter)