From 19595fffa244d4a4bb21a58101cb981f15d8510d Mon Sep 17 00:00:00 2001 From: Vytenis Darulis Date: Sun, 7 Mar 2021 18:00:56 -0500 Subject: [PATCH] fixes --- src/cmd/services/m3dbnode/config/pooling.go | 31 +++++++++++++-------- src/dbnode/server/server.go | 14 +++++++--- src/msg/protocol/proto/roundtrip_test.go | 2 +- src/x/pool/bucketized.go | 4 +-- src/x/pool/config.go | 18 ++++++------ 5 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/cmd/services/m3dbnode/config/pooling.go b/src/cmd/services/m3dbnode/config/pooling.go index 584397a86b..5f92617446 100644 --- a/src/cmd/services/m3dbnode/config/pooling.go +++ b/src/cmd/services/m3dbnode/config/pooling.go @@ -20,7 +20,11 @@ package config -import "fmt" +import ( + "fmt" + + "github.com/m3db/m3/src/x/pool" +) // PoolingType is a type of pooling, using runtime or mmap'd bytes pooling. type PoolingType string @@ -39,7 +43,7 @@ const ( ) type poolPolicyDefault struct { - size int + size pool.Size refillLowWaterMark float64 refillHighWaterMark float64 @@ -214,7 +218,7 @@ var ( { Capacity: intPtr(16), PoolPolicy: PoolPolicy{ - Size: intPtr(524288), + Size: poolSizePtr(524288), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -222,7 +226,7 @@ var ( { Capacity: intPtr(32), PoolPolicy: PoolPolicy{ - Size: intPtr(262144), + Size: poolSizePtr(262144), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -230,7 +234,7 @@ var ( { Capacity: intPtr(64), PoolPolicy: PoolPolicy{ - Size: intPtr(131072), + Size: poolSizePtr(131072), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -238,7 +242,7 @@ var ( { Capacity: intPtr(128), PoolPolicy: PoolPolicy{ - Size: intPtr(65536), + Size: poolSizePtr(65536), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -246,7 +250,7 @@ var ( { Capacity: intPtr(256), PoolPolicy: PoolPolicy{ - Size: intPtr(65536), + Size: poolSizePtr(65536), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -254,7 +258,7 @@ var ( { Capacity: intPtr(1440), PoolPolicy: PoolPolicy{ - Size: intPtr(16384), + Size: poolSizePtr(16384), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -262,7 +266,7 @@ var ( { Capacity: intPtr(4096), PoolPolicy: PoolPolicy{ - Size: intPtr(8192), + Size: poolSizePtr(8192), RefillLowWaterMark: &defaultRefillLowWaterMark, RefillHighWaterMark: &defaultRefillHighWaterMark, }, @@ -486,7 +490,7 @@ func (p *PoolingPolicy) TypeOrDefault() PoolingType { // PoolPolicy specifies a single pool policy. type PoolPolicy struct { // The size of the pool. - Size *int `yaml:"size"` + Size *pool.Size `yaml:"size"` // The low watermark to start refilling the pool, if zero none. RefillLowWaterMark *float64 `yaml:"lowWatermark"` @@ -525,7 +529,7 @@ func (p *PoolPolicy) initDefaultsAndValidate(poolName string) error { } // SizeOrDefault returns the configured size if present, or a default value otherwise. -func (p *PoolPolicy) SizeOrDefault() int { +func (p *PoolPolicy) SizeOrDefault() pool.Size { return *p.Size } @@ -668,3 +672,8 @@ type WriteBatchPoolPolicy struct { func intPtr(x int) *int { return &x } + +func poolSizePtr(x int) *pool.Size { + sz := pool.Size(x) + return &sz +} diff --git a/src/dbnode/server/server.go b/src/dbnode/server/server.go index 48f38856d1..f57dde732c 100644 --- a/src/dbnode/server/server.go +++ b/src/dbnode/server/server.go @@ -1533,7 +1533,7 @@ func withEncodingAndPoolingOptions( logger.Info("bytes pool configured", zap.Int("capacity", bucket.CapacityOrDefault()), - zap.Int("size", bucket.SizeOrDefault()), + zap.Int("size", int(bucket.SizeOrDefault())), zap.Float64("refillLowWaterMark", bucket.RefillLowWaterMarkOrDefault()), zap.Float64("refillHighWaterMark", bucket.RefillHighWaterMarkOrDefault())) } @@ -1920,7 +1920,7 @@ func poolOptions( ) if size > 0 { - opts = opts.SetSize(size) + opts = opts.SetSize(int(size)) if refillLowWaterMark > 0 && refillHighWaterMark > 0 && refillHighWaterMark > refillLowWaterMark { @@ -1929,6 +1929,8 @@ func poolOptions( SetRefillHighWatermark(refillHighWaterMark) } } + opts = opts.SetDynamic(size.IsDynamic()) + if scope != nil { opts = opts.SetInstrumentOptions(opts.InstrumentOptions(). SetMetricsScope(scope)) @@ -1948,7 +1950,7 @@ func capacityPoolOptions( ) if size > 0 { - opts = opts.SetSize(size) + opts = opts.SetSize(int(size)) if refillLowWaterMark > 0 && refillHighWaterMark > 0 && refillHighWaterMark > refillLowWaterMark { @@ -1956,6 +1958,8 @@ func capacityPoolOptions( opts = opts.SetRefillHighWatermark(refillHighWaterMark) } } + opts = opts.SetDynamic(size.IsDynamic()) + if scope != nil { opts = opts.SetInstrumentOptions(opts.InstrumentOptions(). SetMetricsScope(scope)) @@ -1975,7 +1979,7 @@ func maxCapacityPoolOptions( ) if size > 0 { - opts = opts.SetSize(size) + opts = opts.SetSize(int(size)) if refillLowWaterMark > 0 && refillHighWaterMark > 0 && refillHighWaterMark > refillLowWaterMark { @@ -1983,6 +1987,8 @@ func maxCapacityPoolOptions( opts = opts.SetRefillHighWatermark(refillHighWaterMark) } } + opts = opts.SetDynamic(size.IsDynamic()) + if scope != nil { opts = opts.SetInstrumentOptions(opts.InstrumentOptions(). SetMetricsScope(scope)) diff --git a/src/msg/protocol/proto/roundtrip_test.go b/src/msg/protocol/proto/roundtrip_test.go index de5202c6c8..cdb591b410 100644 --- a/src/msg/protocol/proto/roundtrip_test.go +++ b/src/msg/protocol/proto/roundtrip_test.go @@ -197,7 +197,7 @@ func getBytesPool(bucketSizes int, bucketCaps []int) pool.BytesPool { buckets := make([]pool.Bucket, len(bucketCaps)) for i, cap := range bucketCaps { buckets[i] = pool.Bucket{ - Count: bucketSizes, + Count: pool.Size(bucketSizes), Capacity: cap, } } diff --git a/src/x/pool/bucketized.go b/src/x/pool/bucketized.go index 3a43807572..84c575bd4b 100644 --- a/src/x/pool/bucketized.go +++ b/src/x/pool/bucketized.go @@ -79,9 +79,9 @@ func (p *bucketizedObjectPool) Init(alloc BucketizedAllocator) { if size > 0 { opts = opts.SetSize(int(size)) - } else if size == _dynamicPoolSize { - opts.SetDynamic(true) } + opts = opts.SetDynamic(size.IsDynamic()) + iopts := opts.InstrumentOptions() if iopts.MetricsScope() != nil { diff --git a/src/x/pool/config.go b/src/x/pool/config.go index 7e31721d2a..fa967d7b41 100644 --- a/src/x/pool/config.go +++ b/src/x/pool/config.go @@ -40,22 +40,15 @@ type ObjectPoolConfiguration struct { func (c *ObjectPoolConfiguration) NewObjectPoolOptions( instrumentOpts instrument.Options, ) ObjectPoolOptions { - var ( - size = _defaultSize - dynamic bool - ) - - switch { - case c.Size > 0: + size := _defaultSize + if c.Size > 0 { size = int(c.Size) - case c.Size == _dynamicPoolSize: - dynamic = true } return NewObjectPoolOptions(). SetInstrumentOptions(instrumentOpts). SetSize(size). - SetDynamic(dynamic). + SetDynamic(c.Size.IsDynamic()). SetRefillLowWatermark(c.Watermark.RefillLowWatermark). SetRefillHighWatermark(c.Watermark.RefillHighWatermark) } @@ -138,3 +131,8 @@ func (s *Size) UnmarshalText(b []byte) error { return nil } + +// IsDynamic returns whether the pool should be fixed size or not. +func (s Size) IsDynamic() bool { + return s == _dynamicPoolSize +}