forked from TrueCloudLab/xk6-frostfs
90 lines
4 KiB
Go
90 lines
4 KiB
Go
|
package local
|
||
|
|
||
|
import (
|
||
|
"sync/atomic"
|
||
|
"time"
|
||
|
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/engine"
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
_ Limiter = &noopLimiter{}
|
||
|
_ Limiter = &sizeLimiter{}
|
||
|
)
|
||
|
|
||
|
type Limiter interface {
|
||
|
engine.MetricRegister
|
||
|
IsFull() bool
|
||
|
}
|
||
|
|
||
|
func NewLimiter(maxSizeGB int64) Limiter {
|
||
|
if maxSizeGB < 0 {
|
||
|
panic("max size is negative")
|
||
|
}
|
||
|
if maxSizeGB == 0 {
|
||
|
return &noopLimiter{}
|
||
|
}
|
||
|
return &sizeLimiter{
|
||
|
maxSize: maxSizeGB * 1024 * 1024 * 1024,
|
||
|
currentSize: &atomic.Int64{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type sizeLimiter struct {
|
||
|
maxSize int64
|
||
|
currentSize *atomic.Int64
|
||
|
}
|
||
|
|
||
|
func (*sizeLimiter) AddMethodDuration(method string, d time.Duration) {}
|
||
|
func (*sizeLimiter) AddToContainerSize(cnrID string, size int64) {}
|
||
|
func (*sizeLimiter) AddToObjectCounter(shardID string, objectType string, delta int) {}
|
||
|
func (*sizeLimiter) ClearErrorCounter(shardID string) {}
|
||
|
func (*sizeLimiter) DeleteShardMetrics(shardID string) {}
|
||
|
func (*sizeLimiter) GC() metrics.GCMetrics { return &noopGCMetrics{} }
|
||
|
func (*sizeLimiter) IncErrorCounter(shardID string) {}
|
||
|
func (*sizeLimiter) SetMode(shardID string, mode mode.Mode) {}
|
||
|
func (*sizeLimiter) SetObjectCounter(shardID string, objectType string, v uint64) {}
|
||
|
func (*sizeLimiter) WriteCache() metrics.WriteCacheMetrics { return &noopWriteCacheMetrics{} }
|
||
|
|
||
|
func (sl *sizeLimiter) AddToPayloadCounter(shardID string, size int64) {
|
||
|
sl.currentSize.Add(size)
|
||
|
}
|
||
|
|
||
|
func (sl *sizeLimiter) IsFull() bool {
|
||
|
cur := sl.currentSize.Load()
|
||
|
return cur > sl.maxSize
|
||
|
}
|
||
|
|
||
|
type noopLimiter struct{}
|
||
|
|
||
|
func (*noopLimiter) AddMethodDuration(method string, d time.Duration) {}
|
||
|
func (*noopLimiter) AddToContainerSize(cnrID string, size int64) {}
|
||
|
func (*noopLimiter) AddToObjectCounter(shardID string, objectType string, delta int) {}
|
||
|
func (*noopLimiter) AddToPayloadCounter(shardID string, size int64) {}
|
||
|
func (*noopLimiter) ClearErrorCounter(shardID string) {}
|
||
|
func (*noopLimiter) DeleteShardMetrics(shardID string) {}
|
||
|
func (*noopLimiter) GC() metrics.GCMetrics { return &noopGCMetrics{} }
|
||
|
func (*noopLimiter) IncErrorCounter(shardID string) {}
|
||
|
func (*noopLimiter) SetMode(shardID string, mode mode.Mode) {}
|
||
|
func (*noopLimiter) SetObjectCounter(shardID string, objectType string, v uint64) {}
|
||
|
func (*noopLimiter) WriteCache() metrics.WriteCacheMetrics { return &noopWriteCacheMetrics{} }
|
||
|
func (*noopLimiter) IsFull() bool { return false }
|
||
|
|
||
|
type noopGCMetrics struct{}
|
||
|
|
||
|
func (*noopGCMetrics) AddDeletedCount(shardID string, deleted uint64, failed uint64) {}
|
||
|
func (*noopGCMetrics) AddExpiredObjectCollectionDuration(string, time.Duration, bool, string) {}
|
||
|
func (*noopGCMetrics) AddInhumedObjectCount(shardID string, count uint64, objectType string) {}
|
||
|
func (*noopGCMetrics) AddRunDuration(shardID string, d time.Duration, success bool) {}
|
||
|
|
||
|
type noopWriteCacheMetrics struct{}
|
||
|
|
||
|
func (*noopWriteCacheMetrics) AddMethodDuration(string, string, bool, time.Duration, string) {}
|
||
|
func (*noopWriteCacheMetrics) Close(shardID string) {}
|
||
|
func (*noopWriteCacheMetrics) IncOperationCounter(string, string, metrics.NullBool, string) {}
|
||
|
func (*noopWriteCacheMetrics) SetActualCount(shardID string, count uint64, storageType string) {}
|
||
|
func (*noopWriteCacheMetrics) SetEstimateSize(shardID string, size uint64, storageType string) {}
|
||
|
func (*noopWriteCacheMetrics) SetMode(shardID string, mode string) {}
|