- [CHANGE] Log middleware updated to honor
logRequestHeaders
in all logging scenarios. #615 - [CHANGE] Roll back the gRPC dependency to v1.65.0 to allow downstream projects to avoid a performance regression and maybe a bug in v1.66.0. #581
- [CHANGE] Update the gRPC dependency to v1.66.0 and deprecate the
grpc_server_recv_buffer_pools_enabled
option that is no longer supported by it. #580 - [CHANGE]
ring.DoBatchWithOptions
(andring.DoBatch
) reports the cancelation cause when the context is canceled instead ofcontext.Canceled
. - [CHANGE] Multierror: Implement
Unwrap() []error
. This allows to usemultierror.MultiError
with botherrors.Is()
anderrors.As()
. Previously implementedIs(error) bool
has been removed. #522 - [CHANGE] Add a new
grpc_server_recv_buffer_pools_enabled
option that enables recv buffer pools in the gRPC server (assuminggrpc_server_stats_tracking_enabled
is disabled). #510 - [CHANGE] Add a new
grpc_server_stats_tracking_enabled
option that allows us to disable stats tracking and potentially improve server memory reuse. #507 - [CHANGE] Add support for PROXY protocol to Server. #508
- [CHANGE] Add a new middleware to cancel http requests cleanly based on http.TimeoutHandler. #504
- [CHANGE] Exemplar label changes from "traceID" to "trace_id". #487
- [CHANGE] server: import godeltaprof/http/pprof adding /debug/pprof/delta_{heap,mutex,block} endpoints to DefaultServeMux #450
- [CHANGE] Move httpgrpc request & response utils up from httpgrpc/server to httpgrpc package #434, #435
- [CHANGE] Updated the minimum required Go version to 1.20 and update Drone config #420
- [CHANGE] Change
WaitRingStability
andWaitInstanceState
methods signature to rely onReadRing
instead. #251 - [CHANGE] Added new
-consul.cas-retry-delay
flag. It has a default value of1s
, while previously there was no delay between retries. #178 - [CHANGE] Flagext:
DayValue
now always uses UTC when parsing or displaying dates. #71 - [CHANGE] Closer: remove the closer package since it's trivial to just copy/paste. #70
- [CHANGE] Memberlist: allow specifying address and port advertised to the memberlist cluster members by setting the following configuration: #37
-memberlist.advertise_addr
-memberlist.advertise_port
- [CHANGE] Removed global metrics for KV package. Making a KV object will now require a prometheus registerer that will be used to register all relevant KV class metrics. #22
- [CHANGE] Added CHANGELOG.md and Pull Request template to reference the changelog
- [CHANGE] Remove
cortex_
prefix for metrics registered in the ring. #46 - [CHANGE] Rename
kv/kvtls
tocrypto/tls
. #39 - [CHANGE] spanlogger: Take interface implementation for extracting tenant ID. #59
- [CHANGE] The
status_code
label on gRPC client metrics has changed from '200' and '500' to '2xx', '5xx', '4xx', 'cancel' or 'error'. #68 - [CHANGE] Memberlist: changed probe interval from
1s
to5s
and probe timeout from500ms
to2s
. #90 - [CHANGE] Remove package
math
. #104 - [CHANGE] time: Remove time package. #103
- [CHANGE] grpcutil: Convert Resolver into concrete type. #105
- [CHANGE] grpcutil.Resolver.Resolve: Take a service parameter. #102
- [CHANGE] grpcutil.Update: Remove gRPC LB related metadata. #102
- [CHANGE] concurrency.ForEach: deprecated and reimplemented by new
concurrency.ForEachJob
. #113 - [CHANGE] grpcclient: Bump default
grpc-max-send-msg-size
flag to 100 Mb. #123 - [CHANGE] ring/client: It's now possible to set different value than
consul
as default KV store. #120 - [CHANGE] Lifecycler: Default value of lifecycler's
final-sleep
is now0s
(i.e. no sleep). #121 - [CHANGE] Minor cosmetic changes in ring and memberlist HTTP status templates. #149
- [CHANGE] flagext.Secret:
value
field is no longer exported. Value can be read usingString()
method and set usingSet
method. #154 - [CHANGE] spanlogger.SpanLogger: Log the user ID from the context with the
user
label instead oforg_id
. #156 - [CHANGE] ring: removed the following metrics from ring client and lifecycler: #161
member_ring_tokens_owned
member_ring_tokens_to_own
ring_tokens_owned
ring_member_ownership_percent
- [CHANGE] Memberlist:
-memberlist.abort-if-join-fails
option now defaults to false. - [CHANGE] Remove middleware package. #182
- [CHANGE] Memberlist: disabled TCP-based ping fallback, because dskit already uses a custom transport based on TCP. #194
- [CHANGE] Memberlist: KV store now fast-joins memberlist cluster before serving any KV requests. #195
- [CHANGE] Ring: remove duplicate state in NewOp func #203
- [CHANGE] Memberlist: Increase the leave timeout to 10x the connection timeout, so that we can communicate the leave to at least 1 node, if the first 9 we try to contact times out.
- [CHANGE] Netutil: removed debug log message "found network interfaces with private IP addresses assigned". #216
- [CHANGE] Runtimeconfig: Listener channels created by Manager no longer receive current value on every reload period, but only if any configuration file has changed. #218
- [CHANGE] Services:
FailureWatcher.WatchService()
andFailureWatcher.WatchManager()
now panic ifFailureWatcher
isnil
. #219 - [CHANGE] Memberlist: cluster label verification feature (
-memberlist.cluster-label
and-memberlist.cluster-label-verification-disabled
) is now marked as stable. #222 - [CHANGE] Cache: Switch Memcached backend to use
github.com/grafana/gomemcache
repository instead ofgithub.com/bradfitz/gomemcache
. #248 - [CHANGE] Multierror: Implement
Is(error) bool
. This allows to usemultierror.MultiError
witherrors.Is()
.MultiError
will in turn callerrors.Is()
on every error value. #254 - [CHANGE] Cache: Remove the
context.Context
argument from theCache.Store
method and rename the method toCache.StoreAsync
. #273 - [CHANGE] ring: make it harder to leak contexts when using
DoUntilQuorum
. #319 - [CHANGE] ring:
CountTokens()
, used for the calculation of ownership in the ring page has been changed in such a way that when zone-awareness is enabled, it calculates the ownership per-zone. Previously zones were not taken into account. #325 - [CHANGE] memberlist:
MetricsRegisterer
field has been removed frommemberlist.KVConfig
in favor of registrerer passed via intoNewKV
function. #327 - [CHANGE] gRPC client: use default connect timeout of 5s, and therefore enable default connect backoff max delay of 5s. #332
- [CHANGE] Remove
github.com/grafana/dskit/errors
in favour of Go'serrors
package. #357 - [CHANGE] Remove
grpcutil.IsGRPCContextCanceled()
in favour ofgrpcutil.IsCanceled()
. #357 - [CHANGE] Remove
logrus
andlog.Interface
. #359 - [CHANGE] Remove jaeger-specific opentracing usage in
middleware.HTTPGRPCTracer
. #372 - [CHANGE] Always include source IPs in HTTP and gRPC server spans. #386
- [CHANGE] ring: Change
PoolFactory
function type to an interface and create function implementations. #387 - [CHANGE] server: fix incorrect spelling of "gRPC" in
server.Config
fields. #422 - [CHANGE] memberlist: re-resolve
JoinMembers
during full joins to the cluster (either at startup or periodic). The re-resolution happens on every 100 attempted nodes. This helps speed up joins and respect context cancelation #411 - [CHANGE] ring:
ring.DoBatch()
was deprecated in favor ofDoBatchWithOptions()
. #431 - [CHANGE] tenant: Remove
tenant.WithDefaultResolver()
andSingleResolver
in favor of global functionstenant.TenantID()
,tenant.TenantIDs()
, orMultiResolver
. #445 - [CHANGE] Cache: Remove legacy metrics from Memcached client that contained
_memcached_
in the name. #461 - [CHANGE] memberlist: Change default for
memberlist.stream-timeout
from10s
to2s
. #458 - [CHANGE] Cache: Remove errors from set methods on
RemoteCacheClient
interface. #466 - [CHANGE] Expose
BuildHTTPMiddleware
to enable dskitServer
instrumentation addition on external*mux.Router
s. #459 - [CHANGE] Remove
RouteHTTPToGRPC
option and related functionality #460 - [CHANGE] Cache: Remove
MemcachedCache
andRedisCache
structs in favor ofRemoteCacheAdapter
or using the underlying clients directly. #471 - [CHANGE] Removed unused
time.Duration
parameter fromShouldLog()
function inmiddleware.OptionalLogging
interface. #513 - [CHANGE] Changed
ShouldLog()
function signature inmiddleware.OptionalLogging
interface toShouldLog(context.Context) (bool, string)
: the returnedstring
contains an optional reason. When reason is valued,GRPCServerLog
adds(<reason>)
suffix to the error. #514 - [CHANGE] Cache: Remove superfluous
cache.RemoteCacheClient
interface and unify all caches using thecache.Cache
interface. #520 - [CHANGE] Updated the minimum required Go version to 1.21. #540
- [CHANGE] Backoff: added
Backoff.ErrCause()
which is likeBackoff.Err()
but returns the context cause if backoff is terminated because the context has been canceled. #538 - [CHANGE] memberlist: Metric
memberlist_client_messages_in_broadcast_queue
is now split intoqueue="local"
andqueue="gossip"
values. #539 - [CHANGE] memberlist: Failure to fast-join a cluster via contacting a node is now logged at
info
instead ofdebug
. #585 - [CHANGE]
Service.AddListener
andManager.AddListener
now return function for stopping the listener. #564 - [CHANGE] ring: Add
InstanceRingReader
interface toring
package. #597 - [FEATURE] Cache: Add support for configuring a Redis cache backend. #268 #271 #276
- [FEATURE] Add support for waiting on the rate limiter using the new
WaitN
method. #279 - [FEATURE] Add
log.BufferedLogger
type. #338 - [FEATURE] Add
flagext.ParseFlagsAndArguments()
andflagext.ParseFlagsWithoutArguments()
utilities. #341 - [FEATURE] Add
log.RateLimitedLogger
for limiting the rate of logging. Thelogger_rate_limit_discarded_log_lines_total
metrics traces the total number of discarded log lines per level. #352 - [FEATURE] Add
middleware.HTTPGRPCTracer
for more detailed server-side tracing spans and tags onhttpgrpc.HTTP/Handle
requests - [FEATURE] Server: Add support for
GrpcInflightMethodLimiter
-- limiting gRPC requests before reading full request into the memory. This can be used to implement global or method-specific inflight limits for gRPC methods. #377 #392 - [FEATURE] Server: Add
-grpc.server.num-workers
flag that configures thegrpc.NumStreamWorkers()
option. This can be used to start a fixed base amount of workers to process gRPC requests and avoid stack allocation for each call. #400 - [FEATURE] Add
PartitionRing
. The partitions ring is hash ring to shard data between partitions. #474 #476 #478 #479 #481 #483 #484 #485 #488 #489 #493 #496 #497 #498 #503 #509 - [FEATURE] Add methods
Increment
,FlushAll
,CompareAndSwap
,Touch
tocache.MemcachedClient
#477 - [FEATURE] Add
concurrency.ForEachJobMergeResults()
utility function. #486 - [FEATURE] Add
ring.DoMultiUntilQuorumWithoutSuccessfulContextCancellation()
. #495 - [ENHANCEMENT] Add ability to log all source hosts from http header instead of only the first one. #444
- [ENHANCEMENT] Add configuration to customize backoff for the gRPC clients.
- [ENHANCEMENT] Use
SecretReader
interface to fetch secrets when configuring TLS. #274 - [ENHANCEMENT] Add middleware package. #38
- [ENHANCEMENT] Add the ring package #45
- [ENHANCEMENT] Add limiter package. #41
- [ENHANCEMENT] Add grpcclient, grpcencoding and grpcutil packages. #39
- [ENHANCEMENT] Replace go-kit/kit/log with go-kit/log. #52
- [ENHANCEMENT] Add spanlogger package. #42
- [ENHANCEMENT] Add runutil.CloseWithLogOnErr function. #58
- [ENHANCEMENT] Add cache, gate and stringsutil packages. #239
- [ENHANCEMENT] Cache: add Redis support. #245
- [ENHANCEMENT] Optimise memberlist receive path when used as a backing store for rings with a large number of members. #76 #77 #84 #91 #93
- [ENHANCEMENT] Memberlist: prepare the data to send on the write before starting counting the elapsed time for
-memberlist.packet-write-timeout
, in order to reduce chances we hit the timeout when sending a packet to other node. #89 - [ENHANCEMENT] Memberlist: parallelize processing of messages received by memberlist. #110
- [ENHANCEMENT] flagext: for cases such as
DeprecatedFlag()
that need a logger, add RegisterFlagsWithLogger. #80 - [ENHANCEMENT] Added option to BasicLifecycler to keep instance in the ring when stopping. #97
- [ENHANCEMENT] Add WaitRingTokensStability function to ring, to be able to wait on ring stability excluding allowed state transitions. #95
- [ENHANCEMENT] Trigger metrics update on ring changes instead of doing it periodically to speed up tests that wait for certain metrics. #107
- [ENHANCEMENT] Add an HTTP hedging library. #115
- [ENHANCEMENT] Ring: Add ring page handler to BasicLifecycler and Lifecycler. #112
- [ENHANCEMENT] Lifecycler: It's now possible to change default value of lifecycler's
final-sleep
. #121 - [ENHANCEMENT] Memberlist: Update to latest fork of memberlist. #160
- [ENHANCEMENT] Memberlist: extracted HTTP status page handler to
memberlist.HTTPStatusHandler
which now can be instantiated with a custom template. #163 - [ENHANCEMENT] Lifecycler: add flag to clear tokens on shutdown. #167
- [ENHANCEMENT] ring: Added InstanceRegisterDelegate. #177
- [ENHANCEMENT] ring: optimize shuffle-shard computation when lookback is used, and all instances have registered timestamp within the lookback window. In that case we can immediately return origial ring, because we would select all instances anyway. #181
- [ENHANCEMENT] Runtimeconfig: Allow providing multiple runtime config yaml files as comma separated list file paths. #183
- [ENHANCEMENT] Memberlist: Add cluster label support to memberlist client. #187
- [ENHANCEMENT] Runtimeconfig: Don't unmarshal and merge runtime config yaml files if they haven't changed since last check. #218
- [ENHANCEMENT] ring: DoBatch now differentiates between 4xx and 5xx GRPC errors and keeps track of them separately. It only returns when there is a quorum of either error class. If your errors do not implement
GRPCStatus() *Status
from google.golang.org/grpc/status, then this change does not affect you. #201 - [ENHANCEMENT] Added
<prefix>.tls-min-version
and<prefix>.tls-cipher-suites
flags to client configurations. #217 - [ENHANCEMENT] Concurrency: Add LimitedConcurrencySingleFlight to run jobs concurrently and with in-flight deduplication. #214
- [ENHANCEMENT] Add the ability to define custom gRPC health checks. #227
- [ENHANCEMENT] Import Bytes type, DeleteAll function and DNS package from Thanos. #228
- [ENHANCEMENT] Execute health checks in ring client pool concurrently. #237
- [ENHANCEMENT] Cache: Add the ability to use a custom memory allocator for cache results. #249
- [ENHANCEMENT] Add the metrics package to support per tenant metric aggregation. #258
- [ENHANCEMENT] Cache: Add Delete method to cache.Cache interface. #255
- [ENHANCEMENT] Cache: Add backward compatible metrics exposition for cache. #255
<prefix>_cache_client_info{backend="[memcached|redis]",...}
<prefix>_cache_dns_failures_total{backend="[memcached|redis]",...}
<prefix>_cache_dns_lookups_total{backend="[memcached|redis]",...}
<prefix>_cache_dns_provider_results{backend="[memcached|redis]",...}
<prefix>_cache_getmulti_gate_duration_seconds_bucket{backend="[memcached|redis]",...}
<prefix>_cache_getmulti_gate_duration_seconds_count{backend="[memcached|redis]",...}
<prefix>_cache_getmulti_gate_duration_seconds_sum{backend="[memcached|redis]",...}
<prefix>_cache_getmulti_gate_queries_concurrent_max{backend="[memcached|redis]",...}
<prefix>_cache_getmulti_gate_queries_in_flight{backend="[memcached|redis]",...}
<prefix>_cache_hits_total{backend="[memcached|redis]",...}
<prefix>_cache_operation_data_size_bytes_bucket{backend="[memcached|redis]",...}
<prefix>_cache_operation_data_size_bytes_count{backend="[memcached|redis]",...}
<prefix>_cache_operation_data_size_bytes_sum{backend="[memcached|redis]",...}
<prefix>_cache_operation_duration_seconds_bucket{backend="[memcached|redis]",...}
<prefix>_cache_operation_duration_seconds_count{backend="[memcached|redis]",...}
<prefix>_cache_operation_duration_seconds_sum{backend="[memcached|redis]",...}
<prefix>_cache_operation_failures_total{backend="[memcached|redis]",...}
<prefix>_cache_operation_skipped_total{backend="[memcached|redis]",...}
<prefix>_cache_operations_total{backend="[memcached|redis]",...}
<prefix>_cache_requests_total{backend="[memcached|redis]",...}
- [ENHANCEMENT] Lifecycler: Added
InstancesInZoneCount
andInstancesCount
functions returning respectively the total number of instances in the ring and the number of instances in the ring that are registered in lifecycler's zone, updated during the last heartbeat period. #270 - [ENHANCEMENT] Memcached: add
MinIdleConnectionsHeadroomPercentage
support. It configures the minimum number of idle connections to keep open as a percentage of the number of recently used idle connections. If negative (default), idle connections are kept open indefinitely. #269 - [ENHANCEMENT] Memcached: Add support for using TLS or mTLS with Memcached based caching. #278
- [ENHANCEMENT] Ring: improve performance of shuffle sharding computation. #281
- [ENHANCEMENT] Add option to enable IPv6 address detection in ring and memberlist handling. #185
- [ENHANCEMENT] Ring: cache results of shuffle sharding with lookback where possible. #283 #295
- [ENHANCEMENT] BasicLifecycler: functions
ShouldKeepInstanceInTheRingOnShutdown
andSetKeepInstanceInTheRingOnShutdown
for checking and setting whether instances should be kept in the ring or unregistered on shutdown have been added. #290 - [ENHANCEMENT] Ring: add
DoUntilQuorum
method. #293 - [ENHANCEMENT] Ring: add
ReplicationSet.ZoneCount()
method. #298 - [ENHANCEMENT] Ring: add request minimization to
DoUntilQuorum
method. #306 - [ENHANCEMENT] grpcclient: add
<prefix>.initial-stream-window-size
and<prefix>.initial-connection-window-size
configuration flags to alter HTTP flow control options for a gRPC client. #312 - [ENHANCEMENT] Added
TokenGenerator
interface withRandomTokenGenerator
(generating random tokens), andSpreadMinimizingTokenGenerator
(generating tokens with almost even distribution) implementation. By defaultRandomTokenGenerator
is used. #321 - [ENHANCEMENT] Lifecycler: Added
RingTokenGenerator
configuration that specifies theTokenGenerator
implementation that is used for token generation. Default value is nil, meaning thatRandomTokenGenerator
is used. #323 - [ENHANCEMENT] BasicLifecycler: Added
RingTokenGenerator
configuration that specifies theTokenGenerator
implementation that is used for token generation. Default value is nil, meaning thatRandomTokenGenerator
is used. #323 - [ENHANCEMENT] Ring: add support for hedging to
DoUntilQuorum
when request minimization is enabled. #330 - [ENHANCEMENT] Lifecycler: allow instances to register in ascending order of ids in case of spread minimizing token generation strategy. #326
- [ENHANCEMENT] Remove dependency on
github.com/weaveworks/common
package by migrating code to a corresponding package ingithub.com/grafana/dskit
. #342 - [ENHANCEMENT] Add ability to pass TLS certificates and keys inline when configuring server-side TLS. #349 #363
- [ENHANCEMENT] Migrate
github.com/weaveworks/common/aws
andgithub.com/weaveworks/common/test
packages to corresponding packages ingithub.com/grafana/dskit
. #356 - [ENHANCEMENT] Ring: optionally emit logs and trace events in
DoUntilQuorum
. #361 - [ENHANCEMENT] metrics: Add
MetricFamilyMap.MinGauges
andMetricFamiliesPerTenant.SendMinOfGauges
methods. #366 - [ENHANCEMENT] metrics: add
MatchesLabels
,FindMetricsInFamilyMatchingLabels
andFindHistogramWithNameAndLabels
test helper methods. #365 - [ENHANCEMENT] SpanLogger: much more efficient debug logging. #367
- [ENHANCEMENT] server: clarify documentation for
-server.grpc-max-concurrent-streams
CLI flag. #369 - [ENHANCEMENT] Ring: Add ID attribute to
InstanceDesc
for ring members. #387 - [ENHANCEMENT] httpgrpc, grpcutil: added constants and functions for adding request details into outgoing grpc metadata. #391
- [ENHANCEMENT] Ring: clarify the message logged by
DoUntilQuorum
when the first failure in a zone occurs. #402 - [ENHANCEMENT] Ring: include instance ID in log messages emitted by
DoUntilQuorum
. #402 - [ENHANCEMENT] Ring: add support for aborting early if a terminal error is returned by a request initiated by
DoUntilQuorum
. #404 #413 - [ENHANCEMENT] Memcached: allow to configure write and read buffer size (in bytes). #414
- [ENHANCEMENT] Server: Add
-server.http-read-header-timeout
option to specify timeout for reading HTTP request header. It defaults to 0, in which case reading of headers can take up to-server.http-read-timeout
, leaving no time for reading body, if there's any. #423 - [ENHANCEMENT] Make httpgrpc.Server produce non-loggable errors when a header with key
httpgrpc.DoNotLogErrorHeaderKey
and any value is present in the HTTP response. #421 - [ENHANCEMENT] Server: Add
-server.report-grpc-codes-in-instrumentation-label-enabled
CLI flag to specify whether gRPC status codes should be used instatus_code
label of request duration metric. It defaults to false, meaning that gRPC status codes are represented witherror
value. #424 #425 - [ENHANCEMENT] Added
middleware.ReportGRPCStatusOption
that can be passed to the following functions to enable reporting of gRPC status codes in "status_code" label (instead of simplified "error", "cancel" or "success" values): #424 middleware.UnaryServerInstrumentInterceptor
middleware.StreamServerInstrumentInterceptor
middleware.UnaryClientInstrumentInterceptor
middleware.StreamClientInstrumentInterceptor
middleware.Instrument
- [ENHANCEMENT] Server: Added new
-server.http-log-closed-connections-without-response-enabled
option to log details about closed connections that received no response. #426 - [ENHANCEMENT] ring: Added new function
DoBatchWithClientError()
that extends an already existingDoBatch()
. The former differentiates between client and server errors by the filtering function passed as a parameter. This way client and server errors can be tracked separately. The function returns only when there is a quorum of either error class. #427 - [ENHANCEMENT] ring: Replaced
DoBatchWithClientError()
withDoBatchWithOptions()
, allowing a new option to use a customGo(func())
implementation that may use pre-allocated workers instead of spawning a new goroutine for each request. #431 - [ENHANCEMENT] ring: add support for prioritising zones when using
DoUntilQuorum
with request minimisation and zone awareness. #440 - [ENHANCEMENT] ballast: add utility function to allocate heap ballast. #446
- [ENHANCEMENT] ring: use and provide context cancellation causes in
DoUntilQuorum
. #449 - [ENHANCEMENT] ring:
ring.DoBatch
andring.DoBatchWithOptions
now check the context cancellation while calculating the replication instances, failing if the context was canceld. #454 - [ENHANCEMENT] Cache: Export Memcached and Redis client types instead of returning the interface,
RemoteCacheClient
, they implement. #453 - [ENHANCEMENT] SpanProfiler: add spanprofiler package. #448
- [ENHANCEMENT] Server: Add support for
ReportHTTP4XXCodesInInstrumentationLabel
, which specifies whether HTTP 4xx status codes should be used instatus_code
label of request duration metric. It defaults to false, meaning that HTTP 4xx status codes are represented withsuccess
value. Moreover, whenReportHTTP4XXCodesInInstrumentationLabel
is set to true, responses with HTTP status code4xx
are returned as errors. #457 - [ENHANCEMENT] Ring: Add
HasReplicationSetChangedWithoutStateOrAddr
to detect replication state changes ignoring IP address changes due to e.g. member restarts. #464 - [ENHANCEMENT] SpanLogger: Add
SetSpanAndLogTag
method. #467 - [ENHANCEMENT] Add servicediscovery package. #469
- [ENHANCEMENT] Expose
InstancesInZoneCount
andZonesCount
inring.ReadRing
interface. #494 - [ENHANCEMENT] Add optimization to run
concurrency.ForEachJob()
with no parallelism when there's only 1 job. #486 #495 - [ENHANCEMENT] Reduced memory allocations by
user.ExtractFromGRPCRequest()
. #502 - [ENHANCEMENT] Add native histogram version of some metrics: #501
gate_duration_seconds
kv_request_duration_seconds
operation_duration_seconds
- [ENHANCEMENT] Add
outcome
label togate_duration_seconds
metric. Possible values arerejected_canceled
,rejected_deadline_exceeded
,rejected_other
, andpermitted
. #512 - [ENHANCEMENT] Expose
InstancesWithTokensCount
andInstancesWithTokensInZoneCount
inring.ReadRing
interface. #516 - [ENHANCEMENT] Middleware: determine route name in a single place, and add
middleware.ExtractRouteName()
method to allow consuming applications to retrieve the route name. #527 - [ENHANCEMENT] SpanProfiler: do less work on unsampled traces. #528
- [ENHANCEMENT] Log Middleware: if the trace is not sampled, log its ID as
trace_id_unsampled
instead oftrace_id
. #529 - [EHNANCEMENT] httpgrpc: httpgrpc Server can now use error message from special HTTP header when converting HTTP response to an error. This is useful when HTTP response body contains binary data that doesn't form valid utf-8 string, otherwise grpc would fail to marshal returned error. #531
- [ENHANCEMENT] memberlist: use separate queue for broadcast messages that are result of local updates, and prioritize locally-generated messages when sending broadcasts. On stopping, only wait for queue with locally-generated messages to be empty. #539
- [ENHANCEMENT] memberlist: Added
-<prefix>memberlist.broadcast-timeout-for-local-updates-on-shutdown
option to set timeout for sending locally-generated updates on shutdown, instead of previously hardcoded 10s (which is still the default). #539 - [ENHANCEMENT] tracing: add ExtractTraceSpanID function.
- [EHNANCEMENT] crypto/tls: Support reloading client certificates #537 #552
- [ENHANCEMENT] Add read only support for ingesters in the ring and lifecycler. #553 #554 #556 #573 #578 #587
- [ENHANCEMENT] Added new ring methods to expose number of writable instances with tokens per zone, and overall. #560 #562
- [ENHANCEMENT]
services.FailureWatcher
can now be closed, which unregisters all service and manager listeners, and closes channel used to receive errors. #564 - [ENHANCEMENT] Runtimeconfig: support gzip-compressed files with
.gz
extension. #571 - [ENHANCEMENT] grpcclient: Support custom gRPC compressors. #583
- [ENHANCEMENT] Adapt
metrics.SendSumOfGaugesPerTenant
to usemetrics.MetricOption
. #584 - [ENHANCEMENT] Cache: Add
.Add()
and.Set()
methods to cache clients. #591 - [ENHANCEMENT] Cache: Add
.Advance()
methods to mock cache clients for easier testing of TTLs. #601 - [ENHANCEMENT] Memberlist: Add concurrency to the transport's WriteTo method. #525
- [ENHANCEMENT] Memberlist: Notifications can now be processed once per interval specified by
-memberlist.notify-interval
to reduce notify storms in large clusters. #592 - [BUGFIX] spanlogger: Support multiple tenant IDs. #59
- [BUGFIX] Memberlist: fixed corrupted packets when sending compound messages with more than 255 messages or messages bigger than 64KB. #85
- [BUGFIX] Ring:
ring_member_ownership_percent
andring_tokens_owned
metrics are not updated on scale down. #109 - [BUGFIX] Allow in-memory kv-client to support multiple codec #132
- [BUGFIX] Modules: fix a module waiting for other modules depending on it before stopping. #141
- [BUGFIX] Multi KV: fix panic when using function to modify primary KV store in runtime. #153
- [BUGFIX] Lifecycler: if the ring backend storage is reset, the instance adds itself back to the ring with an updated registration timestamp set to current time. #165
- [BUGFIX] Ring: fix bug where hash ring instances may appear unhealthy in the web UI even though they are not. #172
- [BUGFIX] Lifecycler: if existing ring entry is reused, ring is updated immediately, and not on next heartbeat. #175
- [BUGFIX] stringslicecsv: handle unmarshalling empty yaml string #206
- [BUGFIX] Memberlist: retry joining memberlist cluster on startup when no nodes are resolved. #215
- [BUGFIX] Ring status page: display 100% ownership as "100%", rather than "1e+02%". #231
- [BUGFIX] Memberlist: fix crash when methods from
memberlist.Delegate
interface are called on*memberlist.KV
before the service is fully started. #244 - [BUGFIX] runtimeconfig: Fix
runtime_config_last_reload_successful
metric after recovery from bad config with exact same config hash as before. #262 - [BUGFIX] Ring status page: fixed the owned tokens percentage value displayed. #282
- [BUGFIX] Ring: prevent iterating the whole ring when using
ExcludedZones
. #285 - [BUGFIX] grpcclient: fix missing
.
in flag name for initial connection window size flag. #314 - [BUGFIX] ring.Lifecycler: Handle when previous ring state is leaving and the number of tokens has changed. #79
- [BUGFIX] memberlist metrics: fix registration of
memberlist_client_kv_store_count
metric and disable expiration of metrics exposed by memberlist library. #327 - [BUGFIX] middleware: fix issue where successful gRPC streaming requests are not always captured in metrics. #344
- [BUGFIX] Ring:
DoUntilQuorum
andDoUntilQuorumWithoutSuccessfulContextCancellation
will now cancel the context for a zone as soon as first failure for that zone is encountered. #364 - [BUGFIX]
MetricFamiliesPerTenant.SendMinOfGauges
will no longer return 0 if some tenant doesn't have the gauge in their registry, and other tenants have positive values only. #368 - [BUGFIX]
MetricFamiliesPerTenant.SendMaxOfGauges
will no longer return 0 if some tenant doesn't have the gauge in their registry, and other tenants have negative values only. #368 - [BUGFIX]
MetricFamiliesPerTenant.SendMaxOfGaugesPerTenant
no longer includes tenants, which do not have specified gauge. #368 - [BUGFIX] Correctly format
host:port
addresses when using IPv6. #388 - [BUGFIX] Memberlist's TCP transport will now reject bind addresses that are not IP addresses, such as "localhost", rather than silently converting these to 0.0.0.0 and therefore listening on all addresses. #396
- [BUGFIX] Ring: use zone-aware logging when all zones are required for quorum. #403
- [BUGFIX] Services: moduleService could drop stop signals to its underlying service. #409 #417
- [BUGFIX] ring: don't mark trace spans as failed if
DoUntilQuorum
terminates due to cancellation. #449 - [BUGFIX] middleware: fix issue where applications that used the httpgrpc tracing middleware would generate duplicate spans for incoming HTTP requests. #451
- [BUGFIX] httpgrpc: store headers in canonical form when converting from gRPC to HTTP. #518
- [BUGFIX] Memcached: Don't truncate sub-second TTLs to 0 which results in them being cached forever. #530
- [BUGFIX] Cache: initialise the
operation_failures_total{reason="connect-timeout"}
metric to 0 for each cache operation type on startup. #545 - [BUGFIX] spanlogger: include correct caller information in log messages logged through a
SpanLogger
. #547 - [BUGFIX] Ring: shuffle shard without lookback no longer returns entire ring when shard size >= number of instances. Instead proper subring is computed, with correct number of instances in each zone. Returning entire ring was a bug, and such ring can contain instances that were not supposed to be used, if zones are not balanced. #554 #556
- [BUGFIX] Memberlist: clone value returned by function used in CAS operation before storing the value into KV store. #586