Fixes
- User interface language switcher stuck: Fixed an issue where the interface language switcher would not refresh display upon changing the language.
- Bug in head-to-historical block conversion that caused blocks to be created with incorrect time boundaries, resulting in "overlapping blocks" log messages.
Features
- Read-Only snapshots for LabelSets storage. We've added read-only snapshots for label-sets storage, allowing retrieval without locking the current head. This enhancement should improve service throughput. Query will return a list of series IDs and a label-sets storage snapshot, while label-set extraction is handled by a request-processing goroutine on demand.
Enhancements
- Unified encoder storage. Encoders of different types are now stored within a single union container, instead of separate storages. This optimization reduces memory consumption and improves transitions between encoders. Some encoder types effectively act as pass-throughs, utilizing less than 10% of allocated memory. By unifying these encoders, we significantly reduced unused memory, achieving around a 10% memory improvement in sample storage.
- Improved monotonic sequence encoding. Previously, transitioning from monotonic integer sequence encoding to a general encoder like GorillaValues required finalizing the current data chunk and starting a new one, increasing memory and operation costs. We've introduced a new encoder type that allows such transitions within a single chunk without data re-encoding and finalization. Now, a chunk is only finalized upon reaching 255 points.
- Simplified OutOfOrder point handling. OutOfOrder points are now merged into readable data every 5 minutes by a Go ticker, simplifying the C++ storage code, which no longer tracks these points.
- Head rotation optimization. Continuing our head rotation optimizations, we have separated the timing of converting the head into a historical block from its handover to the compactor.
- Sample configuration in release artifacts. Added a example configuration to the release artifacts, allowing users to launch examples without having to copy this file from the documentation.
- Version 3 of the block catalog and corresponding migrations. Version 2 is still in use. This change enables the ability to roll back to this version from future releases.
- Profiling metrics for the service.