X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/adda93976055fde37e92fa3fde7c08f529687132..8a27fe370239ecb8e50d53f46b45ed61203a35ca:/services/keepstore/bufferpool.go diff --git a/services/keepstore/bufferpool.go b/services/keepstore/bufferpool.go index 38f97aff11..b4cc5d38e1 100644 --- a/services/keepstore/bufferpool.go +++ b/services/keepstore/bufferpool.go @@ -1,14 +1,19 @@ -package main +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +package keepstore import ( "sync" "sync/atomic" "time" - log "github.com/Sirupsen/logrus" + "github.com/sirupsen/logrus" ) type bufferPool struct { + log logrus.FieldLogger // limiter has a "true" placeholder for each in-use buffer. limiter chan bool // allocated is the number of bytes currently allocated to buffers. @@ -17,9 +22,9 @@ type bufferPool struct { sync.Pool } -func newBufferPool(count int, bufSize int) *bufferPool { - p := bufferPool{} - p.New = func() interface{} { +func newBufferPool(log logrus.FieldLogger, count int, bufSize int) *bufferPool { + p := bufferPool{log: log} + p.Pool.New = func() interface{} { atomic.AddUint64(&p.allocated, uint64(bufSize)) return make([]byte, bufSize) } @@ -32,13 +37,13 @@ func (p *bufferPool) Get(size int) []byte { case p.limiter <- true: default: t0 := time.Now() - log.Printf("reached max buffers (%d), waiting", cap(p.limiter)) + p.log.Printf("reached max buffers (%d), waiting", cap(p.limiter)) p.limiter <- true - log.Printf("waited %v for a buffer", time.Since(t0)) + p.log.Printf("waited %v for a buffer", time.Since(t0)) } buf := p.Pool.Get().([]byte) if cap(buf) < size { - log.Fatalf("bufferPool Get(size=%d) but max=%d", size, cap(buf)) + p.log.Fatalf("bufferPool Get(size=%d) but max=%d", size, cap(buf)) } return buf[:size] }