Release Notes¶
Release notes for every stable ArcticDB release, from GitHub Releases.
v6.28.0¶
Released 2026-10-14 · GitHub release
There are no user facing changes in this version
v6.27.1¶
Released 2026-10-06 · GitHub release
🚀 Features¶
- Revert defaults for new S3 configurations (#3443)
🐛 Fixes¶
- Add deprecation warnings for the staged parameter of write and write_pickle methods of the Library class (#3420)
v6.26.0¶
Released 2026-09-14 · GitHub release
🐛 Fixes¶
- Performance Improvement on VAST storage: Set CURLOPT_DNS_SHUFFLE_ADDRESSES in our S3 client (#3345)
v6.25.0¶
Released 2026-09-09 · GitHub release
🚀 Features¶
- Read and write support for arrow-backed string dtype (#3242)
- Make prune_previous a library option (#3340)
- Enhancement 18053144964: fix get description output with arrow written data (#3337)
- Enhancement 11864701485: arrow string formatting norm metadata (#3333)
🐛 Fixes¶
- Bound processing pipeline memory use (#3191)
v6.24.0¶
Released 2026-09-02 · GitHub release
🐛 Fixes¶
- Log a warning in a process using arcticdb that forks, from Python 3.12+ on Linux (#3295)
v6.23.0¶
Released 2026-08-17 · GitHub release
🚀 Features¶
- Add compact_data_batch method (#3291)
This is multi-symbol equivalent of compact_data for defragmenting data chunks on disk.
🐛 Fixes¶
- Add MD5 checksum variant of DeleteObjectsRequest for S3 storage (#3259)
v6.22.0¶
Released 2026-08-10 · GitHub release
🚀 Features¶
- Support compact_data arg in append_batch (#3270)
This allows you to "compact", i.e. defragment, the files containing a symbol's data during append_batch, which can improve subsequent read performance. See the docstring on append_batch for more information.
- Add progress logging to
finalize_staged_data's do_compact loop (#3250)
v6.21.0¶
Released 2026-08-04 · GitHub release
🐛 Fixes¶
- Bug fix for query builder filtering with ISIN filters over sets with duplicate str representations (#3201)
- Fix macOS 15
ImportError: Symbol not found: __hash_memoryon mac back-deployed wheels (#3243) - Correctly filter against
NaTas a timestamp rather than anint64with the query builder, soq["col"] > pd.NaTwill now return nothing (like Pandas). This is because we are now tracking thatpd.NaTis a time type, whereas before we treated it asint64. (#3266)
🏎️ Performance¶
- Merge filter clauses in to one expression during query builder evaluation (#3204).
This improves performance and memory use for query builders with long chains of filters like:
q = QueryBuilder()
q = q[q["v3"] > 0.0] # keeps ~all rows
q = q[q["v3"] < 99.0] # keeps ~99%
q = q[q["v2"] > 1] # keeps ~93%
q = q[q["v2"] < 15] # keeps ~93%
q = q[q["v1"] > 1] # keeps ~80%
q = q[q["v1"] < 5] # keeps ~80%
q = q[q["v3"] < 50.0] # narrows to ~50%
v6.20.0¶
Released 2026-07-29 · GitHub release
🚀 Features¶
- Enhancement 9929831600: arrow timezone support (#3225)
- Enhancement 12036593840: append inline defrag post refactors (#3208)
🐛 Fixes¶
- Add NaN and NULL count to MIN/MAX stats (#3139)
- Performance 12498089633: Make more index key reading async (#3237)
v6.19.0¶
Released 2026-07-21 · GitHub release
🚀 Features¶
- Upgrade LMDB 0.9.22 → 0.9.35 and patch for CVE-2019-16224..16228 (#3163)
🐛 Fixes¶
- Persist metadata when appending or updating empty frames, and skip writing unnecessary symbol list keys (#3214)
- Note that this is a behaviour change. Previously, when an empty dataframe was provided to append or update (or batch variations thereof), a warning would be logged and no new version was created. In particular, this meant that the provided metadata was not persisted
- Read Index Key Only Once When Creating Column Stats (#3222)
- Reduce symbol list peak memory usage (#3165)
v6.18.7¶
Released 2026-07-13 · GitHub release
🐛 Fixes
- Correct Raises docstring for missing versions in concat and extend test coverage (https://github.com/man-group/ArcticDB/pull/3211)
- Throw appropriate exceptions on mixed object column types (https://github.com/man-group/ArcticDB/pull/3212)
v6.18.6¶
Released 2026-07-13 · GitHub release
🐛 Fixes¶
- Correct Raises docstring for missing versions in concat and extend test coverage (https://github.com/man-group/ArcticDB/pull/3211)
- Throw appropriate exceptions on mixed object column types (https://github.com/man-group/ArcticDB/pull/3212)
v6.18.5¶
Released 2026-07-06 · GitHub release
🚀 Features¶
- Propagate SortedValue to Polars set_sorted() on index column (#3049)
🐛 Fixes¶
- Bugfix 12337436632: do not orphan data keys in append/update when schemas mismatch (#3187)
- Allow compacting numpy arrays (#3189)
- Add aws_profile support when aws_auth is set default/true in connection string (#3169)
- Make index key reading async in append (#3188)
- Fix copying index keys to preserve their start/end index (#3192)
v6.18.4¶
Released 2026-06-29 · GitHub release
Performance¶
- Deletion is now faster and uses less memory for libraries with many snapshots (#3181)
v6.18.3¶
Released 2026-06-22 · GitHub release
🐛 Fixes¶
- Banning backslash in azure storage (#3160)
v6.18.2¶
Released 2026-06-17 · GitHub release
🏎️ Performance¶
- Use atom key packed in version map cache to decrease cache memory footpring (#3116)
- Resampling performance improvement and sparse aggregation columns support (#3062)
- Submit delete batches in parallel (#3123)
🐛 Fixes¶
- Route AWS SDK S3 logs to stderr by default (#3149)
v6.18.1¶
Released 2026-06-08 · GitHub release
🐛 Fixes¶
- [Bugfix] Fix wrong column naming after append and update when the DataFrame has non-string column name (#3090)
v6.18.0¶
Released 2026-06-01 · GitHub release
🚀 Features¶
- Fully support compact_data and deprecate old methods (#3119)
- Implement POW operator in the QueryBuilder(#3045)
🐛 Fixes¶
- add_to_snapshot does not work with negative version (#3056)
- Be consistent with NaN when filtering on NaT values (#3085)
- Reject adding deleted versions to snapshot (#3113)
Performance¶
Technical API Break
#3085 Changes the way query builder handles NaT in filtering. From now on it will use NaN-like semantics - NaT OP ANYTHING is false for any OP other than !=, for which NaT != ANYTHING is true. For code samples and detailed info see #3085's PR description.
v6.17.0¶
Released 2026-05-18 · GitHub release
🚀 Features¶
- Support sparse data in compact_data_experimental (#3059)
- Adds method to check what the effect of calling compact_data_experimental would be (#3063)
🐛 Fixes¶
- Add Arrow NaT handling (#3032)
- Add warning message to various v1 read and write APIs (#3089)
- Processing pipeline perf improvements (#3086)
- Change add_to_snapshot so it throws when called with negative versions (#3056)
v6.16.0¶
Released 2026-05-11 · GitHub release
🚀 Features¶
- Improve version map cache validation for as_of queries by version and timestamp (#2894)
🐛 Fixes¶
- Improve batch reads performance on Windows (#3048)
- Fix small performance regression reading None / NaN columns after Folly upgrade (#3055)
- Upgrade sparrow to 2.4.0 and use
memcpyfor bool truncation (#3052) - Reduce malloc trim frequency to improve batch read performance (#3060)
v6.15.0¶
Released 2026-05-04 · GitHub release
🚀 Features¶
- Enhancement 11460943163: defrag dynamic schema (#3029)
v6.14.0¶
Released 2026-04-29 · GitHub release
Features¶
- Validate kwargs provided to
NativeVersionStoreAPIs and raise if invalid kwargs are provided (#3035). Permitallow_secondary. The exception can be flipped to a warning log by setting the env varARCTICDB_DISABLE_KWARG_VALIDATION=1.
Fixes¶
Minor API change - Use
UnsortedDataExceptionnotSortingExceptionin update (#3043). Note thatUnsortedDataExceptionis a sub-type ofSortingExceptionso we don't expect breaks from this. The only case affected would be if you have code that wanted to handle all sorting exceptions other than those fromupdate, which seems very improbable. We now consistently useUnsortedDataExceptionthroughout our APIs.- Document our symbol name validation rules in faq.md (#3022)
v6.13.0¶
Released 2026-04-21 · GitHub release
🏎️ Performance¶
- Improve performance of delete_batch (#2999)
🐛 Fixes¶
- Fix seg fault in
lib.readdue to race condition in exception handling after network error (#3004)
v6.12.1¶
Released 2026-04-15 · GitHub release
🐛 Fixes¶
- Improve Windows timezone error message for Arrow output (https://github.com/man-group/ArcticDB/pull/3001)
- Preserve runtime configuration when multiprocessing with spawn/forkserver (https://github.com/man-group/ArcticDB/pull/2995)
v6.11.1¶
Released 2026-03-30 · GitHub release
🐛 Fixes¶
- Fixes for number of IO operations performed by index only reads (#2942)
v6.11.0¶
Released 2026-03-23 · GitHub release
🚀 Features¶
- Validate kwargs passed to NativeVersionStore methods (#2936)
🐛 Fixes¶
- Fix reading of sparse string columns as Arrow (#2932)
- Match on multiple columns in merge updates (#2926)
- Fix RangeIndex returned by index-only reads to match that returned by reads that return data (#2955)
v6.10.2¶
Released 2026-03-16 · GitHub release
🐛 Fixes¶
- Include
malloc.hto havemalloc_trim's declaration (#2946) - Remove redundant move in initialization (#2885)
- Improve logging for symbol list compaction (#2948)
- Remove unused WriteOptions from WriteClause (#2944)
v6.10.1¶
Released 2026-03-12 · GitHub release
🐛 Fixes¶
- Do not log a warning when reading a non-existent storage lock (#2937)
v6.10.0¶
Released 2026-03-02 · GitHub release
🚀 Features¶
- Experimental lazy dataframe collect schema (#2906)
🏎️ Performance¶
- Improve
read(output_format="pyarrow")performance for bool columns (#2883)
🐛 Fixes¶
- Fix import alongside
matplotlib(#2918)
v6.9.2¶
Released 2026-02-23 · GitHub release
🚀 Features¶
- Implementation of experimental merge capability in ArcticDB (#2890)
⚠️ The API is under development. It is not subject to semver and can change even in minor or patch versions. The function is named merge_experimental, but will be renamed to merge when the API becomes stable.
The merge API offers a straightforward way for users to modify or insert specific rows in their data.
import arcticdb
import pandas as pd
ac = arcticdb.Arctic("lmdb://demo")
lib = ac.get_library("prices", create_if_missing=True)
sym = "AAPL"
prices = pd.DataFrame(
{"price": [100.5, 102.3, 99.8, 101.0, 103.5]},
index=pd.date_range("2023-01-01", periods=5),
)
lib.write(sym, prices)
print(lib.read(sym).data)
Original data:
| price | |
|---|---|
| 2023-01-01 | 100.5 |
| 2023-01-02 | 102.3 |
| 2023-01-03 | 99.8 |
| 2023-01-04 | 101.0 |
| 2023-01-05 | 103.5 |
Dataframe with corrections:
corrections = pd.DataFrame(
{"price": [999.0, 888.0]},
index=pd.DatetimeIndex([pd.Timestamp("2023-01-02"), pd.Timestamp("2023-01-04")]),
)
print(corrections)
| price | |
|---|---|
| 2023-01-02 | 999.0 |
| 2023-01-04 | 888.0 |
Apply the corrections to the original data:
lib.merge_experimental(sym, corrections)
print(lib.read(sym).data)
| price | |
|---|---|
| 2023-01-01 | 100.5 |
| 2023-01-02 | 999.0 |
| 2023-01-03 | 99.8 |
| 2023-01-04 | 888.0 |
| 2023-01-05 | 103.5 |
Demo notebook with more example usage and current limitations
🐛 Fixes¶
- Fix list_versions bug - include versions of symbols that have been deleted but are kept alive by a snapshot (#2864)
- Fix
read(output_format=Arrow)when a column contains only empty strings (#2871) - Claude documentation and skills for navigating and enhancing the codebase (#2902)
- Fix s3 sts windows storage test (#2892)
- Implement query stats for in-memory storage, use them to fix flaky ASV benchmark (#2899)
- Arrow read fix truncation with dynamic schema (#2872)
- Refactor Python bindings for improved cross-ABI compatibility with enterprise downstream. (#2884)
v6.9.0¶
Released 2026-02-02 · GitHub release
🔨 Maintenance¶
🐛 Fixes¶
- conda-build: Relax
libprotobuf's specification (#2835) - docs: Update prebuilt binary availability (#2813)
- Improve parallel writes error message to include symbol name (#2859)
- Fix real azure tests issue (#2762)
- Consolidate bindings for Enterprise ABI compatibility (#2821)
- List versions with skip_snapshots and a snapshot specified should not read all snapshots in the library (#2863)
v6.8.0¶
Released 2026-01-28 · GitHub release
🚀 Features¶
- Python 3.14 build for pypi (#2828)
🐛 Fixes¶
v6.7.0¶
Released 2026-01-12 · GitHub release
🚀 Features¶
- No pickle V2 meta structure normalization for recursive normalizer (#2778)
Introduce new normalization (V2) for recursive normalizer metastructure as the existing one requires pickle.
Please note that data with V2 normalized metastructure is not readable by <v6.7.0 releases.
Plan of introduction:
| Version | Change |
|---|---|
| >= v6.7.0 | Deprecation warning when writing V1 meta structure; V2 meta structure can be enabled optionally |
| >= v7.0.0 | V2 meta structure will be enabled by default |
Please consider enabling V2 as V1 will be deprecated in future v7.0.0 release. To enabld it, you need to set environment variable ARCTICDB_VersionStore_RecursiveNormalizerMetastructure_int to 2
🐛 Fixes¶
- Testing improvments (#2804, #2801, #2808, #2807, #2815)
- Properly specify LMDB's include directory (#2805)
- conda-build: Add workflow for
linux_aarch64(#2806) - build: Include all headers uniformly (#2817)
- Dropping support for SecureTransport on Mac using only OpenSSL (#2816)
v6.6.0¶
Released 2026-01-06 · GitHub release
🚀 Features¶
- Log string pool decode timings in release builds (#2802)
- Upgrade sparrow to 1.4.0 (#2789)
- conda-build: Build for Windows (#2252)
- Allow Fortran styled columns starting with None and NaN (#2797)
For instance,
np.array([[None, "string"], ["aaa", "bbb"], ["ccc", "ddd"]])andnp.array([[np.nan, "string"], ["aaa", "bbb"], ["ccc", "ddd"]])can now be written to ArcticDB libraries
🐛 Fixes¶
- Suppress mongo endSession warning (#2777)
- Restrict custom CA certificate configurations for the Azure SDK to Linux only (#2282)
v6.5.0¶
Released 2025-12-12 · GitHub release
✨ Features¶
- Arrow read support (read directly as
pyarrow.Tableorpolars.DataFrame) (#2776) - 🍎 macOS support (Python 3.9-3.13) (#2761 #2765 #2775)
🚀 Performance¶
- Decode only required columns in processing pipeline with dynamic schema (#2766)
- Improve hash grouping aggregation parallelism (#2729)
- Improve recursive normalized data read performance (#2787)
🐛 Fixes¶
- Improve
StageResultprintout (#2760) - Allow colon characters in Arctic URI query parameters (#2783)
- Fix ASV benchmarks LMDB map full error (#2786)
v6.3.2¶
Released 2025-11-20 · GitHub release
🏎️ Performance¶
- Improve list versions performance when there are lots of snapshots (#2732)
- Improve peak memory use when writing multi-index dataframes (#2749)
🐛 Fixes¶
v6.3.1¶
Released 2025-11-03 · GitHub release
🐛 Fixes¶
- Reduce number of requests when getting a library (#2722)
- Delete written data keys when storage quota is reached. (#2707)
- Fix staged data corner case when using finalize with
delete_staged_data_on_failureand update docs (#2714) - Allow grouping on empty columns (#2727)
- Fix reads of series with multiindex (#2726)
- Update sparrow to 1.3.0 (#2725)
- Register cleanup function reliably (#2730)
v6.2.6¶
Released 2025-10-20 · GitHub release
🐛 Fixes¶
- conda build now depends on sparrow-devel (#2665)
- Fix flaky filter test (#2694)
- Performance 18146257858: speedup reading as_of tombstoned versions alive in snapshots (#2699)
v6.2.5¶
Released 2025-10-13 · GitHub release
🐛 Fixes¶
- Increase the version when batch_append and batch_update are called with upsert and the symbol is tombstoned (#2661)
- Fix changed message for GCP (#2676)
- Raise exception if filtering recursively normalized data or numpy array (#2641)
- Fix azure missing keys exception on mac (#2637)
- Downgrade Windows distribution to windows-2022 in GitHub CI (#2672)
- Increase testing coverage of the v1 API update_time, name, batch_restore_version (#2668)
- Fix flaky test test_library_get_key_path (#2648)
- Update installation tests with 6.1.1 version (#2682)
v6.2.4¶
Released 2025-10-08 · GitHub release
🐛 Fixes¶
- Add UpdatePayload and DeleteRequest to arcticdb. import path (#2664)
# Now you can
import arcticdb.WritePayload
import arcticdb.UpdatePayload
- v1 API - batch_read_an_join specific tests (#2659)
- Add exception when trying to write an index or a column with a boolean name (#2667)
df = pd.DataFrame({"col": [1, 2, 3]}, index=idx)
df.index.name = True
# Below line now raises ArcticNativeException
lmdb_version_store.write(symbol, df)
df = pd.DataFrame({True: [1, 2, 3]}, index=pd.date_range(ts, periods=3))
# Below line now raises ArcticNativeException
lmdb_version_store.write(symbol, df)
- Adds http response code to S3 error message (#2656)
- Downgrade Windows distribution to windows-2022 (#2672) (#2675)
- Fix asv test disk space issue (#2692)
v6.2.3¶
Released 2025-09-30 · GitHub release
🐛 Fixes¶
- Fix range intersection calculation in query.cpp (#2632)
- additional check for batch_metadata_multi (#2653)
v6.2.2¶
Released 2025-09-23 · GitHub release
- Upgrade node version in CI to 24 (#2636)
https://github.com/man-group/ArcticDB/compare/v6.2.1...v6.2.2
v6.2.1¶
Released 2025-09-15 · GitHub release
🐛 Fixes¶
- Update vcpkg baseline and sparrow to 1.1.0 (#2634)
v6.2.0¶
Released 2025-09-08 · GitHub release
🚀 Features¶
- Add docstring and warning for disparity between
will_item_be_pickledandis_symbol_pickle(#2548) - Remove feature toggle and update docstrings for staged data with tokens (#2614)
🐛 Fixes¶
- Retry install Azurite (#2606)
- delete_container() operation for Azurite should not be reason tests to fail (#2603)
- asv flakiness fixes (#2590)
- test: ARM64-check
test_type_promotion_int64_and_float64_up_to_float64(#2613) - Retry on OOM during tests execution (#2617)
- xfail for now noisy test (#2621)
- Increase coverage - append,update and stage v1 API (#2470)
-
Make copy_index_key_recursively parallelizable (#2622)
v6.1.1¶
Released 2025-08-26 · GitHub release
🐛 Fixes¶
- Mem leaks - increase mem limits so that we have time to create ASV tests (#2558)
- [Bugfix 9754509632] Fix use-after-stack-free (#2569)
- Add missing type hints to Library and fix append return type (#2574)
- Azure tests added (#2498)
- Disable operation on objects of mismatched types leading to corruption [Bugfix 9754433454] (#2572)
- Fix ASV test failures and Installation Test Failures on Master (#2578)
- Fix test_type_promotion_int64_and_float64_up_to_float64 (#2557)
- Fix workflow problems for Persistеnce test executions and ASV AWS S3 tests execution (#2585)
- Remove signaled threads on TaskScheduler destruction on Windows with … (#2588)
- Continue on error if macos wheel removal fails (#2599)
v6.1.0¶
Released 2025-08-20 · GitHub release
This is the first externally published release from the major v6 releases. As such it includes some breaking changes to the type system
⚠️ Breaking Changes¶
- Groupby using dynamic schema now produces a stable dtype. Previously, the dtype depended on the segments being processed; now the dtype will always be the same dtype able to represent the column across all segments on disk.
- Return type for min/max aggregations in
groupbyfor libraries using dynamic schema now is the type able to represent the column across all segments, while in earlier versions it wasfloat64regardless of the type of the column across different segments. - Using
sumaggregation ingroupbyon aboolcolumn now returns the count of rows containingTrueas auint64. - Using
meanaggregation ingroupbyontimestampcolumns now returns atimestamp(instead offloat64). It is computed by taking the integer part of(1/n) * Σ ts[i], for i = 1 to n - The return type of a projection operation involving a floating point number will always be of type
float64regardless of the types involved in the computation. - Performing a
filterorprojectionon an empty DataFrame might throw an exception depending on the dtype of the columns, while older versions always returned an empty DataFrame. The dtype of the columns of an empty DataFrame depends on the version of Pandas that is used to write them. Some versions usefloat64by default; others useobject. Filtering likequery_builder = query_builder[query_builder["col"] < 5]will throw an exception if the DataFrame is empty and the type of an empty column isobject.
🚀 Features¶
- Resampling for libraries that use dynamic schema
- Add
batch_deleteAPIs and functionality (#2463) - Support open ended
row_rangeonQueryBuilderandreadmethods (#2550)
🐛 Fixes¶
- Fix handling of segments contained only of None values in sort merge (#2536)
- Fix OverflowError from to_json() call (#2556)
- Storage lock increase wait time and add artificial slow writes (#2497)
- Remove signaled threads on TaskScheduler destruction on Windows (#2544)
- Add utilities to let the storage failure simulator simulate high latency conditions (#2407)
- Extend testing for the index names returned by get_info (#2448)
- Fix flaky segfault in concat testing (#2458)
- conda-build: Use clang and clang++ 18 for osx (#2476)
- fix: Remove use after free (#2459)
- Fix segfault during encoding sparse data (#2475)
- maint: Replace Folly's ranges with the standard library's (#2479)
- conda-build: Use macos-14 (#2482)
- Bugfix 8083916814: Respect pickle_on_failure kwarg (#2474)
- Remove numpy pin (#2487)
- Update_batch additional tests (#2437)
- Make append_batch and update_batch noop with empty dataframes when there's an existing version (#2507)
- Release the GIL when logging from the Python API (#2486)
v5.10.0¶
Released 2025-07-29 · GitHub release
Performance¶
- Reduce memory overhead when reading dataframes from ArcticDB by @alexowens90 in https://github.com/man-group/ArcticDB/pull/2435
Fixes¶
- Fix recursive normalizers issue by @poodlewars in https://github.com/man-group/ArcticDB/pull/2451
- Use a less strict pin for sparrow by @IvoDD in https://github.com/man-group/ArcticDB/pull/2473
- Query Builder regex filter support and upgrade PCRE to PCRE2 V2 by @phoebusm in https://github.com/man-group/ArcticDB/pull/2466
- Relax numpy pin by @poodlewars in https://github.com/man-group/ArcticDB/pull/2509
v5.9.3¶
Released 2025-07-28 · GitHub release
🐛 Fixes¶
- Remove numpy pin (#2494)
v5.9.2¶
Released 2025-07-23 · GitHub release
🐛 Fixes
- Load only required data keys on edge case values of
date_range(#2387) - Fix the
__str__for a query builder withrow_range(#2418) - Validate snapshot names (#2415). This applies our normal symbol name validation to snapshots. Snapshot names must be at most 254 chars long, in ASCII range [32, 126] and must not include * < or >
🏎️ Performance
- Improve performance of reads after a
write_and_prune_previouscall (#2460)
v5.9.0¶
Released 2025-07-07 · GitHub release
🚀 Features¶
- Enhancement 9351235967: Support projecting a column of constant values (#2405)
🐛 Fixes¶
- Remove arcticdb package dependencies on tests and do checks during build (#2403)
- Fix Windows 3.13 CI (#2409)
- Bugfix/9256801170/memory over allocation when reading shorts dfs (#2404)
- fixed asv benchmark.json file (#2410)
- Reimplement version map reload delete fix (#2395)
- Apply perf improvements from pydata talk (#2408)
- Validate staged data symbol names (#2414)
- Test for test_admin_tools.py::test_get_sizes_for_symbol flakyness (#2398)
- [Cherry-pick] Fix V2 API created from V1 API when use_norm_failure_handler_known_ty… (#2423)
v5.8.0¶
Released 2025-06-09 · GitHub release
🚀 Features¶
🐛 Fixes¶
- Bugfix 9209057536: Allow concatenation of uint64 columns with int* columns (#2365)
- Try to fix flaky compat tests (#2364)
- Fix for scheduled workflow build failures to appear in slack (#2371)
- New versions 5.5 and 5.6 added to installation tests monitoring (#2373)
- Extend test coverage for recursive normalizers (#2366)
- Respect legacy env vars (#2376)
- Query Stats s3 v3 benchmark (#2346)
- Update recursive normalizers layout assertions (#2377)
v5.7.0¶
Released 2025-06-02 · GitHub release
🚀 Features¶
- Introduce a ternary operator for filters and projections (#2103)
The new ternary operator is designed to work like numpy.where, allowing operations like:
q = QueryBuilder()
q = q.apply("new_col", where(q["col1"] == 0, q["col2"], q["col3"]))
For more details, see the docstring and associated tests.
🐛 Fixes¶
- Bug fixes for resampling (#2351)
- Fix crash when resampling data that was
updated with some particular old ArcticDB client versions - Fix resampling over a
date_rangenot covered by the symbol's data - Better error message when resampling a non-timeseries indexed symbol
- Fix crash when resampling data that was
- Fix for reading multiindex series with timestamps as the first level and strings as the second level (#2363)
- This regressed in
5.6.0
- This regressed in
📖 Docs¶
v5.6.0¶
Released 2025-05-26 · GitHub release
🚀 Features¶
🐛 Fixes¶
- Asv v2 s3 tests (Refactored) (#2249)
- Installation tests v4 (#2339)
- Installation Tests Workflow Fixes (#2354)
- Add resolve_defaults back in as a static method of NativeVersionStore (#2358)
-
Patch for Real S3 library names (#2353)
-
File operations (#2345)
v5.5.1¶
Released 2025-05-19 · GitHub release
🐛 Fixes¶
v5.5.0¶
Released 2025-05-13 · GitHub release
🚀 Features¶
- Query Stat framework v3 (#2304)
🐛 Fixes¶
- Skip azurite api check (#2288)
- Update docs for sts ca issue (#2265)
- Hold the GIL when incrementing None's refcount to prevent race conditions when there are multiple Python threads (#2334)
v5.4.1¶
Released 2025-05-05 · GitHub release
🐛 Fixes¶
v5.4.0¶
Released 2025-04-28 · GitHub release
🚀 Features¶
- Symbol sizes API (#2266)
🐛 Fixes¶
- Refactor to_atom and to_ref to properly use forwarding references (#2321)
- ci: Benchmark workflow adaptations (#2327)
- Fix pr getting action (#2323)
- conda-build: Extend development environment for Windows (#2328)
- Prevent exceptions in ReliableStorageLockGuard destructor (#2331)
- Increase tolerance to arithmetic mismatches with Pandas with floats (#2333)
- Support MSVC 19.29 (#2332)
- Fix race conditions on the None object refcount during a multithreaded read (#2320)
v5.3.4¶
Released 2025-04-22 · GitHub release
🐛 Fixes¶
- More uniqueness in library names (#2305)
- Remove python conda pin (#2287)
- Replace moto import with one compatible with moto 5.0 (#2312)
- Fix compatibility test cleanup (#2308)
- Allow trimming ChunkedBuffers to zero bytes (#2313)
- Add warning when integer types are promoted to float during aggregations with dynamic schema. (#2275)
- Fix appending with compact incomplete to an empty dataframe (#2268)
- Fix nfs storage tests and bugs in nfs storage (#2298)
- Change CMake version so that coverity static analysis builds don't crash (#2299)
- Update s3.py moto*.create_fixture - add retry attempts (#2311)
v5.3.2¶
Released 2025-04-07 · GitHub release
🐛 Fixes¶
- Improve error message in case of network error (https://github.com/man-group/ArcticDB/pull/2257)
- Fix the perfect forwarding in variant_match https://github.com/man-group/ArcticDB/pull/2262
- Simple API to remove several staged symbols at once. https://github.com/man-group/ArcticDB/pull/2260
- Remove fmt pin on conda https://github.com/man-group/ArcticDB/pull/2272
- Create a dev image that uses clang as a compiler and use it for the Linux C++ tests https://github.com/man-group/ArcticDB/pull/2269
- Fix slack build failure bad link https://github.com/man-group/ArcticDB/pull/2273
- Update version constants to replace Sync and Backup IDs https://github.com/man-group/ArcticDB/pull/2264
- Fix publishing of rc https://github.com/man-group/ArcticDB/pull/2290
v5.3.1¶
Released 2025-04-01 · GitHub release
🐛 Fixes¶
- Precompute output schema from processing (#2233)
- Fix convert_int_to_float in compact_incomplete V1 library API method (#2235)
- Slightly wider tolerance to arithmetic mismatches with Pandas with floats (#2244)
- Get object sizes based on S3's ListObjects output (just with scan_object_sizes() to start with) (#2248)
- Add bounds check for empty tensors and enhance tests for numpy slicing (#2222)
- Improve CI run time (#2215)
- Add more logging to compat tests (#2250)
- Accept strings for the mode when finalizing staged data (#2232)
- Use
isforNone(#2256) - Correctly handle
zoneinfotimezones (#2253) - Fix for STS support (#2254)
- Backport fmt pin removal on conda to v5.3.1 (#2276)
v5.3.0¶
Released 2025-03-24 · GitHub release
🚀 Features¶
- Implement batch_update (#2100)
- GCP Support over the S3 XML API (#2176)
- Expose
set_config_int, andget_config_intonarcticdb.config, add config docs, documentation fixes (#2225)
🐛 Fixes¶
- Include wheels in releases (#2180)
- Fix s3 https connection on windows (#2182)
- Fix off by one errors in staged segment validation (#2191)
- Fix asv execution in PRs and run asv with chosen tests (#2188)
- Add debug logging for finalize_staged_data (#2189)
- Update supported Python versions docs (#2193)
- Developmental releases on demand (#2190)
- Skip the compat tests in Conda (#2194)
- Code formatting (#1769)
- Dev build naming and tag action fix (#2195)
- Update utils.py to overcome usage of test package for asv tests (#2198)
- Update test_mem_leaks.py not to fail on MacOS (#2197)
- Remove cloudflare steps from docs build (#2200)
- Remove
Change Typetemplate and change label names (#2196) - when workflow executed on schedule run all tests (#2205)
- Fix job to work properly when called from other workflow (#2211)
- Improve segment serialization for v1 segments (#2183)
- Type promotion between integral and floating types (#2173)
- Fix size issue (#2213)
- Add pin for fmt in conda (#2223)
- Memray tests for memory leaks for head() and tail() (#2199)
- Release the GIL during parallel writes to avoid deadlock (#2220)
- Fix and test arcticdb reading streaming data (#2218)
- Return correct timestamp in the VersionItem returned by write when recursive normalizers are used (#2209)
- Tolerate keys being deleted while scanning object sizes (#2206)
- Fix regression when writing combination of np.NaN and None (#2212)
- Fix test_chunks_the_same flakiness (#2239)
- Testing for unicode handling across our API (#2224)
- Automatically build docs on release (#2230)
- Read and write snapshot metadata from the correct place (#2161)
- Only publish benchmark results for master builds (#2157)
- Fix issue with running only selected tests (#2155)
- Multiple fixes for STS token refresh (#2115)
- Extend update docs to mention possible data fragmentation (#2164)
- Update Arrow so that ArcticDB can be compiled with Clang 19 (#2134)
- Read arrow data (#2141)
- Small improvements to test_compatibility.py (#2163)
- DBA tools for ReliableStorageLock (#2152)
- Bound the number of data segments kept live in memory during compaction and sort_merge (#2167)
- Key segment pair refactor - do not move the segment out of the KeySegmentPair as it is a shared resource (#2166)
- Remove unnecessary clone following the key segment pair refactor (#2169)
- Enhance MockS3Client to support real client delegation and configurable failures (#2158)
- Simplify our unpickling logic and add tests for Python 2 pickles (#2160)
- Enhancement: Implement Library.get_key_path for NFS and Azure storages (#2172)
- Automated Release scripts (#2174)
- Real Storage asv perf POC (#2165)
- Migrate Coverity (#2179)
v5.2.6¶
Released 2025-03-10 · GitHub release
- Release the GIL during staged writes (writes with
staged=Trueorparallel=True). This fixes a deadlock when staging a dataframe containing unicode strings.
v5.2.5¶
Released 2025-02-26 · GitHub release
What's Changed¶
- Fix off by one errors in staged segment validation (#2191) by @poodlewars in https://github.com/man-group/ArcticDB/pull/2203
v5.2.3¶
Released 2025-02-07 · GitHub release
🐛 Fixes¶
- Fix to bound the number of data segments kept live in memory during compaction and sort_merge by @poodlewars in https://github.com/man-group/ArcticDB/pull/2170
- Fix debug symbols not attaching to release and release script failing… by @ognyanstoimenov in https://github.com/man-group/ArcticDB/pull/2171
v5.2.2¶
Released 2025-02-03 · GitHub release
Fixes¶
Read and write snapshot metadata from the correct place PR #2161 .
Snapshot metadata is an optional structure of extra information saved with a snapshot, created when you call,
from arcticdb import Library
lib: Library
lib.snapshot("snap", metadata=["example", "metadata"])
lib.list_snapshots()
# {"snap": ["example", "metadata"]}
If you never call snapshot with metadata= then you are not affected by this issue. Metadata associated with a symbol is not affected by this issue.
Between v4.5.0 and v5.2.1 we mistakenly changed to save snapshot metadata in a new data format. This affects the snapshot metadata in the dict values returned by list_snapshots. Those versions incorrectly return None for snapshot metadata written by earlier versions, even if that metadata does exist.
This fix has us now check both data formats for snapshot metadata, so ArcticDB v5.2.2 onwards is compatible with snapshot metadata written by any version. We also revert to writing the metadata in its old location from v5.2.2 onwards. This means that ArcticDB clients between v4.5.0 and v5.2.1 will need to upgrade to be able to read snapshot metadata written by clients outside of those versions (otherwise they will see the metadata as None). ArcticDB clients older than v4.5.0 need to upgrade to v5.2.2+ to be able to read snapshot metadata written by versions between v4.5.0 and v5.2.1.
v5.2.1¶
Released 2025-01-29 · GitHub release
🐛 Fixes¶
- Use Pandas unpickling to handle Pandas 1 vs Pandas 2 API differences better . This only affects reading Pandas structures saved as
metadatawith an ArcticDB symbol. (#2151) - Don't warn about missing keys when reading symbol ref as it is common to try to read a non-existent symbol (#2153).
- This fixes a minor regression in v5.2.0 that caused noisy logging output like
Failed to find segment for key 'r:aaa' : No response body..
- This fixes a minor regression in v5.2.0 that caused noisy logging output like
v5.2.0¶
Released 2025-01-27 · GitHub release
🚀 Features¶
- Introduce the block version ref key (#1969)
- Add AWS STS authentication support (#1884)
- Python 3.12 and Python 3.13 support (#1945) (#2016)
- Numpy 2 support (#2050)
- Reliable storage lock (#2014)
- Storage mover (#2039)
- Add S3 STS proxy support (#2072)
- Implement origin for pandas resampling (#1962)
- Refactor to storages to support async reads (#2012)
- Chunk up incomplete segments by rows when they are staged (#2117)
read_batchperformance improvements - now up to 10 times faster
🐛 Fixes¶
- Fix decoding of fields with >2^16 blocks (#2089)
- Handle very old normalization metadata RangeIndexes (#2118)
- Finalize staged data memory use improvements (#2013)
- Fix handling of empty DF in pandas 1.0 (#2010)
- Fix string reference count leak (#1998)
- Fix version release not attaching symbols for debug (#2018)
- Delete staged segments after writing vref key (#2037)
- Improve the performance of update by parallelising reads. Implement internal async update method. (#2087)
- Performance regression when requesting a timestamp before the earliest version (#2076)
- Using compact incomplete on a library with dynamic schema with a named index can result in an unreadable index (#2116)
- Notimplemented handling (#2108)
- Fix race between list_versions and delete_snapshot on NFS (#2092)
v5.1.3¶
Released 2025-01-21 · GitHub release
What's Changed¶
- Bugfix 4897570890562900007: Fix decoding of fields with >2^16 blocks by @alexowens90 in https://github.com/man-group/ArcticDB/pull/2088
- Handle very old normalization metadata RangeIndexes (#2118) by @alexowens90 in https://github.com/man-group/ArcticDB/pull/2120
- 5.1.x Add exception when staging with different namd indexes by @G-D-Petrov in https://github.com/man-group/ArcticDB/pull/2126
- Update the version for upload and download artifact GH actions to v4 by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/2131
- Storage mover port (#2039) by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/2127
v5.1.2¶
Released 2024-12-10 · GitHub release
What's Changed¶
- Finalize staged data memory use improvements in (https://github.com/man-group/ArcticDB/pull/2013) 755bbda11c8b8bab85774552c7584cb49b2179bf
v5.1.1¶
Released 2024-12-05 · GitHub release
🐛 Fixes¶
- Fix string reference count leak by @willdealtry in https://github.com/man-group/ArcticDB/pull/1998
- Fix issues with backwards compatibility from 5.1 by @willdealtry in https://github.com/man-group/ArcticDB/pull/2017
- Claim more disk space for wheel building by @phoebusm in https://github.com/man-group/ArcticDB/pull/1994
- Make static analysis a cron job by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/2003
- more tests on read_batch() by @grusev in https://github.com/man-group/ArcticDB/pull/1987
- fix handling of empty DF in pandas 1.0 by @grusev in https://github.com/man-group/ArcticDB/pull/2010
- Fix static analysis cron workflow by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/2009
- Update BSL table with 5.1 by @IvoDD in https://github.com/man-group/ArcticDB/pull/2007
- Test new manylinux by @G-D-Petrov in https://github.com/man-group/ArcticDB/pull/2025
- Fix nfs test setup fail by @phoebusm in https://github.com/man-group/ArcticDB/pull/2022
- Introduce the block version ref key by @poodlewars in https://github.com/man-group/ArcticDB/pull/1969
v5.1.0¶
Released 2024-11-15 · GitHub release
🚀 Features¶
- Enhancement 1895: Fully parallelise processing in read_batch (#1950)
🐛 Bugfixes:¶
- Fix reference counting on python strings (#1999)
- Make snapshot names in run_scenario more unique (#1961)
- Fix Mac ARM Build (#1960)
- Fix delete snapshot so that it doesn't orphan data keys or delete the wrong key (#1973)
- Bugfix 1970: Give helpful error message if and/or/not operators are provided in QueryBuilder operations (#1976)
-
Bugfix 127: Improve error message when recursively normalized metastruct is too big (#1981)
Fix publish result curl fail (#1974) -
Bugfix/1841/maintain empty series names (#1983)
- Bugfix/1937/do not write append ref keys when staging incompletes (#1985)
- Bugfix 1306: Add nonreg test for update failing with 1-nanosecond different timestamps (#1978)
- Test meaningful error message when reading incompletes from non-existent symbol (#1991)
- Bugfix 1655: Disallow / character in mongo lib names (#1992)
v5.0.0¶
Released 2024-10-31 · GitHub release
API Changes¶
date_rangereturned byget_info[_batch]was adatetime.datetimenow returns apandas.Timestampwith nanosecond precision (#1461)stagedargument removed fromwrite_pickle_batch(#1642)- Set row_count/rows to None in
get_description/get_infoand batch versions thereof if symbol is pickled (#1664) - Do not fallback to iterating snapshots if if version
as_ofint or timestamp not found in version chain in V2 API (#1672) - Use
float64as the result type for all division operations in the processing pipeline (#1794) - Make SymbolDescription return type match type hints (#1877)
🚀 Features¶
- Lazy dataframe implementation (#1703)
- Arbitrary clause ordering (#1860)
- Sort staged data before writing (#1869)
- Make library manager a LRU cache (#1930)
- Preserve nanoseconds and timezones in date range from get info (#1461)
- Do not fallback to iterating snapshots if if version as_of int or timestamp not found in version chain in V2 API (#1672)
- Use float64 as the result type for all division operations in the processing pipeline (#1794)
🐛 Fixes¶
- Improve full build time by 30% by adding PCH (#1764)
- Fix typo in docs flow (#1952)
- Fix entt dep management for conda builds (#1955)
- Run the pull request on the PR sha with the pull_request_target event (#1954)
- Fix the timers macro, configure it with a cmake option (#1914)
- Small fixes for mac arm compilation and fix some tests (#1905)
- Fixes for sort and finalize (#1763)
- Bugfix 1552: Set row_count/rows to None in get_description/get_info and batch versions thereof if symbol is pickled (#1664)
- Bugfix 1641: Remove unused staged arg from write_pickle_batch (#1642)
- Refactor 1749: make processing tests great again (#1758)
- Always use strict weak ordering in std::sort comparators (#1747)
- Use EncodedFieldImpl.blocks() rather than casting member variable _blocks (#1745)
- Fix
batch_restore_versionfailing to use correct next_version_id (#1823) - Bugfix arcticdb-man 96: Improve error message with pd.Timedelta columns (#1874)
- Bugfix 1865: Make SymbolDescription return type match type hints (#1877)
- Bugfix 1652: Improve error message when object dtype columns contains Timestamps with mixed timezones (#1880)
- Bugfix 1841: Correctly roundtrip None and empty string pd.Series names (#1878)
- Fix library options compatibility across ArcticDB versions (#1862)
- Bugfix 1830: fix resampling with multiindex (#1873)
Uncategorized
- Extend tests for merge sort (#1708)
- Check if object is an instance of QueryBuilder when comparing for equality in QueryBuilder.eq (#1754)
- Add resampling offset (#1743)
- Refactor/1722/remove composite from processing pipeline (#1741)
- Fix Segment use-after-move when replicating to NFS (#1756)
- Throw exception if appending using sort_and_finalize will create unordered index (#1760)
- Improve logging for stress tests (#1759)
- Remove rocksdb (#1761)
- Update BSL table for v4.5.0 (#1768)
- Handle KeyNotFoundException in recurse_index_key (#1766)
- Add Storage API to check for existence of a key matching a predicate (#1762)
- Revert "Handle KeyNotFoundException in recurse_index_key" (#1776)
- Add 1 Billion Row Challenge Notebook (#1774)
- Remove KeyNotFoundException catch in CopyCompressedInterStoreTask (#1778)
- Limit 3 item ref key bypass to only when loading undeleted versions (#1775)
- append docstring improvement: added that append on a new symbol will create it (#1787)
- Parallelize string handling, enable python type handlers, prepare for Arrow (#1698)
- Add interface to pass a cached entry to tombstone all (#1793)
- Fix sort index (#1796)
- Fix windpws CI by adding the string header in decimal.cpp (#1801)
- Remove unused RuntimeConfig feature (#1803)
- Add unimplemented increment counter (#1804)
- Pre arrow refactor (#1805)
- Fix regression in bool pickling (#1810)
- Add API to remove Prometheus metrics (#1806)
- Fix symbol list bug on compaction (#1324) (#1798)
- Allow metrics to be registered twice (#1816)
- Docs 1809: lazy dataframe documentation and example notebook (#1815)
- Bugfix 1818: Fix QueryBuilder equality checks (#1819)
- Support reading from prefixes that include a dot (#1820)
- Fix compilation errors for clang 18 (#1813)
- Add StagedDataFinalizeMethod to docs (#1744)
- Add demo video link to README.md (#1837)
- More sort and finalize fixes (#1799)
- Fix conda build (#1854)
- Fix row slicing with sort_and_finalize throw on column slicing when the column group is larger than the segment column size (#1838)
- Don't override the https value for backwards compatibility (#1840)
- Support the ignore missing key read option in recurse_index_keys (#1844)
- Add flag to clear staged data on failure to both finalize functions (#1856)
- Change test for library emptiness to allow specifying key types to exclude (#1861)
- Fixing clean builds (#1868)
- Extend LMDB instance lifetime (#1879)
- Allow customizing the most useful AWS SDK settings. (#1875)
- Refactor 1833:use entt as ecs (#1834)
- Fix mono CI issue (#1917)
- Fix
lib_tool.read_to_keys(#1832) - Skip lmdb compat tests for versions <= 4.5.0 (#1923)
- Use relative paths for compat tests (#1924)
- ci: Use mamba 2.0 via
mamba-org/setup-micromamba@v2.0.0(#1855) - Remove unneeded step (#1929)
- Adds a type change utility for append data keys in lib_tool (#1932)
- fix introduction help (#1933)
- Rewrite the mkdocs template so the links point to the correct version (#1942)
- Change the pull_request trigger to pull_request_target (#1947)
- Revert pull_request_target back to pull_request (#1949)
New Contributors¶
- @grusev made their first contribution in https://github.com/man-group/ArcticDB/pull/1933
- @maxim-morozov made their first contribution in https://github.com/man-group/ArcticDB/pull/1947
v4.5.1¶
Released 2024-10-18 · GitHub release
Fixes¶
- Fix bug where libraries created with 4.5.0 are not compatible with older versions by @G-D-Petrov in https://github.com/man-group/ArcticDB/pull/1842
- Sort and finalize fixes by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/1859
- Extend LMDB instance lifetime (#1879) by @vasil-pashov in https://github.com/man-group/ArcticDB/pull/1908
Uncategorized
- Compat tests 451rc by @IvoDD in https://github.com/man-group/ArcticDB/pull/1912
- Compat test flakyness fixes 451rc by @IvoDD in https://github.com/man-group/ArcticDB/pull/1925
- Bugfix/1785/backport to 4.5.1 by @alexowens90 in https://github.com/man-group/ArcticDB/pull/1927
v4.5.0¶
Released 2024-08-16 · GitHub release
Resampling (#1495)¶
We are pleased to introduce a first version of resampling into ArcticDB.
Using the QueryBuilder you can easily resample timseries data as part of the read. The following code will resample a symbol into hourly buckets, for example. Please see the QueryBuilder docs for more info.
q = adb.QueryBuilder()
q = q.resample("h").agg({"to_sum": "sum"})
lib.read("symbol", query_builder=q).data
Features¶
Remove Composite from processing pipeline (#1722)
Refactor VersionMap to include all combinations of LoadTypes and whether to include_deleted (#1443)
Multiple aggregators per column are now possible in QueryBuilder (#1468)
Add s3 custom ca support (#1338)
Add version_chain ASV benchmarks (#1508)
Support mongodb+srv connection strings (#1513)
Enhancement/515/support metadata in finalize staged data (#1525)
list_snapshots: Add option to skip loading metadata (#1531)
LibraryTool add read_index (#1533)
Make service alive checking more universal (#1607)
Enhancement/1610/method to force compact symbol list (#1624)
Fixes¶
Add maybe_unused to fix MSVC compilation error by @vasil-pashov in #1739
Properly hash descriptor in v1 (master) by @willdealtry in #1682
Bugfix 1692: fix batch read with row range no query builder (#1710)
Bugfix 1720: Speedup processing pipeline with lots of columns (#1723)
Fix use after move in op_log.cpp (#1732)
Implement support for very old style symbol list entries. (#1630)
Fix ArcticDB reading streaming data (#1647)
Add validate_index arg to staged data finalization in both V1 and V2 APIs (#1694)
Fix sort_and_finalize_staged_data (#1617)
Bugfix 1609: Allow parallel appends when incomplete index values match last existing index value in the symbol (#1619)
Fix SYMBOL_LIST Segment index out of bounds bug (#1473)
Fix overflow bug on append and update (#1585)
Bugfix/1250/compact incompletes rationalisation (#1467)
Guard against numpy v2 to prevent breakage when it gets released (#1465)
Consistently handle timezones in QueryBuilder filtering (#1483)
Align azure timeout with s3 (#1487)
bugfix/1247: Don't create an lmdb library if the name is invalid. (#1481)
Cleanup arctic client after usage in local_quary_builder in ASV (#1522)
Bugfix/1518/get description date range incorrect after delete data in range (#1523)
Bugfix 1507+1509: dynamic schema different index append fixes (#1529)
Only write ref key once when writing with prune_previous_versions (#1560)
Fix #1148: Show clearer error message for mismatched types in QueryBuilder (#1557)
Bugfix 1615: Fix segfault in benchmark_clause.cpp (#1616)
Bugfix 1612: Raise a meaningful exception type/message when an empty string is provided as a symbol/snapshot name (#1618)
Adapt Raise to use format string as message directly if no args are given (#1606)
Restore mistake in #1315 (#1482)
Update docstring: added section to clarify that an empty df does not delete (#1592)
New Contributors¶
- @StageTired made their first contribution in https://github.com/man-group/ArcticDB/pull/1485
v4.4.7¶
Released 2025-01-08 · GitHub release
What's Changed¶
- Backport list versions and delete_snapshot race 8104588520 by @poodlewars in https://github.com/man-group/ArcticDB/pull/2102
v4.4.3¶
Released 2024-06-26 · GitHub release
🐛 Fixes¶
- Release GIL on update and append (#1559)
- Only write ref key once when writing with prune_previous_versions (#1571)
- Fix overflow bug on append and update (#1585)
- Require numpy < 2 (#1465)
Uncategorized
v4.4.2¶
Released 2024-05-08 · GitHub release
🐛 Fixes¶
- Fix segmentation fault related to Ray package (by reverting to C++ 17 build) #1542
- Fix get_description date range after using delete_data_in_range #1526
- Fix tail segfault with empty data #1543
Please see v4.4.1 release notes for the previous changes
v4.4.1¶
Released 2024-04-16 · GitHub release
🐛 Fixes¶
- Bug fix in Azure Storage, clear
to_deletelist to allow deletion of more than 256 keys in a batch (#1482)
Please see v4.4.0 release notes for the main changes from the last release.
v4.4.0¶
Released 2024-04-05 · GitHub release
🚀 Features¶
- Prevent writing empty types by default (gives compatibility with v1.6.2 readers) in https://github.com/man-group/ArcticDB/pull/1440
- Improved resilience to external (out of order) replication in https://github.com/man-group/ArcticDB/pull/1355
- Support modifying library options, and introduce enterprise library options in https://github.com/man-group/ArcticDB/pull/1457
You can now modify library options on an existing Arctic library:
from arcticdb.options import LibraryOptions
ac: Arctic = ...
lib = ac.create_library("lib")
ac.modify_library_option(lib, ModifiableLibraryOption.ROWS_PER_SEGMENT, int(1e6))
See arcticdb/options.py for a description of the modifiable options.
🐛 Fixes¶
- Bugfix 902: Cannot filter on nans and nones in string and float columns https://github.com/man-group/ArcticDB/pull/1276
- Bugfix: Empty type in https://github.com/man-group/ArcticDB/pull/1227
- Bugfix 1334: optimise version ref key access https://github.com/man-group/ArcticDB/pull/1345
- Fix version map cache invalidation policies in https://github.com/man-group/ArcticDB/pull/1351
- Fix empty column default type in https://github.com/man-group/ArcticDB/pull/1378
- Bugfix #1388: Correctly check whether we are in ec2 in https://github.com/man-group/ArcticDB/pull/1415
- Bugfix 1423: Raise a meaningful error message when trying to use
QueryBuilderwith sparse data in https://github.com/man-group/ArcticDB/pull/1435 - Bug Fix Windows: Remove lmdb files when
delete_libraryis called in https://github.com/man-group/ArcticDB/pull/1437 - Bugfix 1256: reject parallel appends to unsorted data in https://github.com/man-group/ArcticDB/pull/1442
- Bugfix 1209: Consistently return metadata from write, append, update, write_metadata, and batch versions thereof in https://github.com/man-group/ArcticDB/pull/1444
- Bugfix/935/match pandas behviour when aggregating columns with nans in https://github.com/man-group/ArcticDB/pull/1450
- LZ4 decoding empty type: move the segment buffer forward by the compressed data size for empty types in https://github.com/man-group/ArcticDB/pull/1463
- Bugfix 1268: swap out xxhash for grouping in https://github.com/man-group/ArcticDB/pull/1416
- Bugfix 1260: allow broader range of numeric type promotion with dynamic schema https://github.com/man-group/ArcticDB/pull/1426
Storage Exception Normalization¶
We have made storage-related exceptions uniform across different backend storage platforms, despite the fact that the underlying behaviour varies.
- #447 LMDB Exceptions Normalization in https://github.com/man-group/ArcticDB/pull/1285
- #447 Memory Storage Exception Normalization in https://github.com/man-group/ArcticDB/pull/1297
- Adds a MockS3Client which can simulate s3 failures in https://github.com/man-group/ArcticDB/pull/1281
- #447 S3 Storage Exceptions Normalization in https://github.com/man-group/ArcticDB/pull/1304
- Add a
MockAzureClientwhich can simulate azure failures in https://github.com/man-group/ArcticDB/pull/1331 - #447 Azure Storage Exceptions Normalization in https://github.com/man-group/ArcticDB/pull/1344
- #447 Exception normalization for RocksDB in https://github.com/man-group/ArcticDB/pull/1360
- Refactor: Move mongo client errors handling into mongo_storage.cpp before normalization in https://github.com/man-group/ArcticDB/pull/1383
- #447 Add a
MockMongoClientwhich can simulate mongo failures in https://github.com/man-group/ArcticDB/pull/1395 - #447 Mongo Exceptions Normalization in https://github.com/man-group/ArcticDB/pull/1411
- LMDB Exception Normalization with mock client in https://github.com/man-group/ArcticDB/pull/1414
Uncategorized
- Prevent writing empty types by default (gives compatibility with v1.6.2 readers) in https://github.com/man-group/ArcticDB/pull/1440
- Add a way to enable/disable silencing of errors when deleting a library in https://github.com/man-group/ArcticDB/pull/1271
- Feature flag to use WinInet client not WinHttp in https://github.com/man-group/ArcticDB/pull/1284
- Abstract an S3ClientWrapper out of details-inl.hpp in https://github.com/man-group/ArcticDB/pull/1274
- GitHub Workflows: Make can_merge run for all files to allow any docs changes to be mergeable. in https://github.com/man-group/ArcticDB/pull/1292
- Fix benchmarks in https://github.com/man-group/ArcticDB/pull/1286
- Reduce the hashes that we use to benchmark against in https://github.com/man-group/ArcticDB/pull/1303
- Refactor 1278: Column data dense forward iterator in https://github.com/man-group/ArcticDB/pull/1301
- Add contains to Arctic class, to support lib in arctic in https://github.com/man-group/ArcticDB/pull/1309
- Update BSL table for v4.3.0 in https://github.com/man-group/ArcticDB/pull/1282
- Utility to analyze the size of various key types in a library in https://github.com/man-group/ArcticDB/pull/1291
- Do not compile wheel build on EC2 in https://github.com/man-group/ArcticDB/pull/1318
- Docs: For top level imports use
arcticdb.objectinstead of using full path toobjectin https://github.com/man-group/ArcticDB/pull/1323 - conda-build: Adaptations for folly in https://github.com/man-group/ArcticDB/pull/1320
- Align docstring with the behaviour in https://github.com/man-group/ArcticDB/pull/1243
- Added 142 new tests for empty/missing operations in https://github.com/man-group/ArcticDB/pull/1319
- Abstract AzureClientWrapper out of azure_storage.cpp in https://github.com/man-group/ArcticDB/pull/1315
- Stop using ec2 runners in the conda+linux workflow in https://github.com/man-group/ArcticDB/pull/1302
- Adds python tests which simulate s3 storage exceptions in https://github.com/man-group/ArcticDB/pull/1330
- S3 local delete failure raising meaningful error in https://github.com/man-group/ArcticDB/pull/1329
- Fix dynamic strings append to fixed strings issue in https://github.com/man-group/ArcticDB/pull/1346
- Minor improvement on analysis flow in https://github.com/man-group/ArcticDB/pull/1290
- Build time improvements in https://github.com/man-group/ArcticDB/pull/1263
- build: Disable compilers' extensions in https://github.com/man-group/ArcticDB/pull/1335
- maint: Fully specify
fmt::format_toin https://github.com/man-group/ArcticDB/pull/1333 - Fixed pd_delete_replace + added single tests in https://github.com/man-group/ArcticDB/pull/1342
- Use type-deduced functor for all column iterating functions in https://github.com/man-group/ArcticDB/pull/1347
- Disable ec2 runners on PR in https://github.com/man-group/ArcticDB/pull/1357
- Use 14.39 toolset in https://github.com/man-group/ArcticDB/pull/1359
- Removed pytest dependency from arcticdb in https://github.com/man-group/ArcticDB/pull/1350
- build: Use C++20 in https://github.com/man-group/ArcticDB/pull/1332
- mark test_symbol_list_parallel_stress_with_delete as flaky in https://github.com/man-group/ArcticDB/pull/1368
- Docs: Increase CSS max-wdith and build docs from a branch in https://github.com/man-group/ArcticDB/pull/1363
- Print error msg in ExponentialBackoff exception in https://github.com/man-group/ArcticDB/pull/1365
- Disable missing key warnings when expected in https://github.com/man-group/ArcticDB/pull/1379
- Remove pin on civetweb in https://github.com/man-group/ArcticDB/pull/1380
- Multiple segments within the same block: storage and library refactoring in https://github.com/man-group/ArcticDB/pull/1307
- Not allowing snapshotting tombstoned versions in https://github.com/man-group/ArcticDB/pull/1280
- Clarify Intel/AMD build support in https://github.com/man-group/ArcticDB/pull/1389
- Fix debug formatting in https://github.com/man-group/ArcticDB/pull/1397
- maint: Replace
robin_hoodwithunordered_densein https://github.com/man-group/ArcticDB/pull/1390 - Test benchmarking improvements in https://github.com/man-group/ArcticDB/pull/1326
- maint: Remove dependency on some elements of folly in https://github.com/man-group/ArcticDB/pull/1370
- Allow different testing dependency version in pipeline in https://github.com/man-group/ArcticDB/pull/1410
- Add metadata extraction functions in library_tool in https://github.com/man-group/ArcticDB/pull/1375
- Add a global timeout for pytests in https://github.com/man-group/ArcticDB/pull/1381
- Set upper bound for supported protobuf version in https://github.com/man-group/ArcticDB/pull/1421
- 1 year and 1k stars readme banner in https://github.com/man-group/ArcticDB/pull/1425
- read_batch set include_deleted to false by default when reading a version in https://github.com/man-group/ArcticDB/pull/1419
- build: Update to fmt 10 in https://github.com/man-group/ArcticDB/pull/1427
- Make changes for prometheus metrics in https://github.com/man-group/ArcticDB/pull/1418
- maint: Replace use of folly getCurrentThreadId with STL in https://github.com/man-group/ArcticDB/pull/1417
- maint: Ignore the diff of #1263 in https://github.com/man-group/ArcticDB/pull/1340
- Roll back vcpkg version to fix failing abseil build in https://github.com/man-group/ArcticDB/pull/1436
- maint: Remove use of
folly/portability/PThread.hin https://github.com/man-group/ArcticDB/pull/1447 - maint: Remove use of folly/system/ThreadName.h in https://github.com/man-group/ArcticDB/pull/1446
- Better error messaging around pickling in https://github.com/man-group/ArcticDB/pull/1451
- Update analysis_workflow.yml in https://github.com/man-group/ArcticDB/pull/1455
- Adding update, append and delete asv benchmarks in https://github.com/man-group/ArcticDB/pull/1434
- Support generators for metadata vectors again in https://github.com/man-group/ArcticDB/pull/1456
- Remove the brotli dep in https://github.com/man-group/ArcticDB/pull/1458
v4.3.1¶
Released 2024-02-09 · GitHub release
🐛 Fixes¶
- Fix regression in round-tripping empty type for dynamic schema (#1313)
v4.3.0¶
Released 2024-02-07 · GitHub release
Version 4.3.0 was pulled from PyPi and Conda Forge due to a regression. We no longer provide builds for 4.3.0.
Regression is fixed in 4.3.1 release. Please use 4.3.1 instead.
🚀 Features¶
- Exposes existing regex filter in
lib.list_symbols(#1123)
>>> from arcticdb import Arctic
>>> import pandas as pd
>>> ac.create_library("test")
>>> lib = ac["test"]
>>> lib.write("sym0", pd.DataFrame())
>>> lib.write("sym1", pd.DataFrame())
>>> lib.list_symbols()
['sym0', 'sym1']
>>> lib.list_symbols(regex="1$")
['sym1']
- Introduce jitter in symbol list compaction threshold (#1174)
- Sorting speed improvements in SegmentInMemory (#1181)
- Reduce log level from warn to debug for "Failed to find segment for key" message where appropriate (#1130)
- Speed up writes by parellising
aggregator_set_dataover data segments (#1065) - Support sortedness checks and maintenance with parallel writes and appends (#1251)
- #1014 Introduce storage fixtures to easily test ArcticDB against various storage backends. See
arcticdb.storage_fixturespackage. (#1054)
🐛 Fixes¶
- Release the symbol list's storage lock if it has existed for longer than its TTL (#1134)
- Ensure that the version chain is always updated atomically (#1104)
- Return empty
pd.DataFramewithMultiIndexif originally provided (#1126) - conda-build: Explicitly depend on openssl and libcurl (#1244)
- Reintroduce attrs as a runtime dependency (#1272)
- Speedup reading wide dataframes that have no empty columns (#1225)
- Bugfix 1046: Prevent appending/updating numeric columns with non-identical types with static schema (#1205)
- Bugfix 1173: Correctly apply sortedness checks when calling update with date_range argument (#1238)
- Fix non-deterministic hashing in Linux conda builds (#1261)
- Improve date range returned by get info for unordered and range indexed dataframes (#1241)
- Bugfix 1248 and 1249: compact_incomplete reject incomplete segments that overlap each other, or existing segments in the case of append (#1255)
- Detailed error in case of S3's libcurl network failure (#1265)
Uncategorized
- [Aggregation tests] Replace
non_zero_numeric_type_strategieswithnumeric_type_strategies(#968) - Fixes reuse_name for azure storage #1061 (#1115)
- small getting-started-docs tweaks (#1103)
- Improve fixture reliability (#1116)
- maint: Define
arcticdb::proto::loggerinlog.hpp(#1117) - maint: Remove unneeded includes (#1113)
- [Column] Move some definitions to cpp file (#1100)
- maint: Move implementations in
memory_segment_impl.hpptomemory_segment_impl.cpp(#1092) - Update git blame file (#1118)
- Flaky test hypothesis mean agg (#496) (#1125)
- Use same region for S3 and EC2 to avoid data transfer costs (#1128)
- build: Remove attrs from the dependencies (#1135)
- Only build on pull request events (#1127)
- More fixture robustness improvements (#1132)
- Remove releasing docs as they are now in GitHub wiki (#1136)
- Update README.md (#1141)
- Remove test parellism, and speed up test bottleneck (#1143)
- Fix support for shared/unique S3 prefixes (#1140)
- maint: Remove headers in
types.hpp(#1121) - Skip flaky pytests which check log messages (#1161)
- Update README.md (#1156)
- Refactor: Move DataError method implementaitons into cpp (#1155)
- Update .git-blame-ignore-revs for DataError implementation move (#1165)
- Add MSVC 2022 preset. Tweak MSVC CMake settings. (#1133)
- Build-time improvments: allocator.hpp, log.hpp, buffer.hpp (#1152)
- Fix publish.yml workflow (#1167)
- README - put third party tools in alphabetical order (#1172)
- Fix persistent tests (#1147)
- Introduce sorting and merging google benchmarks (#1138)
- Skip array type tests due to occsional segfaults (#1187)
- build: Remove some adherence to folly (#1144)
- Add equity options notebook + data (#1178)
- maint: Ignore some references (#1190)
- Added equity options notebook to index (#1193)
- Use vcpkg for gbench (#1189)
- Forward port internal PR #1082 (#1180)
- Bugfix 1191: Propagate storage failures in version map batch methods to calling code (#1194)
- Link against python explicitly in order to make MSVS builds work (#1192)
- Final version of equity opts notebook (#1196)
- Bugfix 1182: Unskip test that is no longer flaky (#1197)
- Docs that StorageFailureSimulator is not used in all stores (#1203)
- Clean and reorganize
OffsetStringandStringPool(#1137) - build: Do not depend on protobuf-lite (#1212)
- docs: Fix documentation links (#1038)
- Fix recurse_segment forward declaration to match the signature of its implementation (#1217)
- Update git blame file for
OffsetStringandStringPoolimplementation move (#1211) - Add frequently used items at the top level of arcticdb (#1219)
- Switch from
arcticdbtoadbin the demo Notebooks (#1228) - Add a way to handle non-string values for index names (#1170)
- Pass unmodified argument by const& to FieldCollection::add_field (#1234)
- Switch from
arcticdbtoadbin python docstrings (#1236) - Remove obsolete test log level environment variable (#1231)
- Update incorrect docs for
validate_index(#1233) - Bugfix 1207: Use pandas.Timestamp.max - 1 day in test_read_ts. Remove pointless snapshot. Improve error message when index key reading fails. (#1235)
- Bugfix invalid library name (#1206)
- Enhancement/1253/skip temporary allocation when decoding dynamic schema columns (#1259)
- Expose headers for consumers via arcticdb_core_static (#1257)
- Update WarnVersionTypeNotHandled::warn() warning message (#1273)
- Update README correcting spelling (#1275)
- build: Adapt protobuf compilation (#1199)
- Enable skipped test_partial_write_hashed (#1215)
v4.2.1¶
Released 2023-12-15 · GitHub release
This is a patch release to version 4.2.0 which fixes Issue #1157 regarding the defragment_symbol_data method.
🐛 Fixes¶
- Defragmenting a symbol no longer invalidates previous versions (https://github.com/man-group/ArcticDB/pull/1163)
v4.2.0¶
Released 2023-12-12 · GitHub release
🚀 Features¶
- Remove python deps that are no longer needed (#1005)
- New
row_rangeargument onreadandReadRequest(#864)
>>> from arcticdb import Arctic
>>> import pandas as pd
>>> df = pd.DataFrame({"col1": np.arange(10), "col2": np.arange(100, 110)}, index=np.arange(10))
>>> ac = Arctic("lmdb://test")
>>> lib = ac.get_library("test_lib", create_if_missing=True)
>>> lib.write("test_symbol", df)
>>> lib.read("test_symbol", row_range=(3,7)).data
col1 col2
3 3 103
4 4 104
5 5 105
6 6 106
🐛 Fixes¶
- Symbol list refactor (#796)
- Fixed aggregation on sparse grouping columns (#1068).
Depending on timestamps being accurate in the symbol list has proved to be troublesome. Instead, we should use the most recent version id known to a client as an indication of the client's view of the world at the time as symbol list entry is written. That way, we can identify and correct symbol list entries that refer to conflicting writes.
Notebooks¶
- Added AWS blockchain notebook (#1040)
- Added AWS blockchain to docs index (#1043)
- Add Snapshot + Equity Notebooks (#1071)
Uncategorized
- 744 extend real storage tests to run with large lifelike data and all api methods (#989)
- Update BSL table for 4.1 (#1023)
- Centralise the pytest marks (#1024)
- Document the S3 backends that we have tested against and "un-beta" LMDB on Windows (#1016)
- Sparse aggregation (#1007)
- Docs versioning (#1008)
- set-default after deploy so that 'latest' alias can be created first (#1029)
- build: Remove old Cython configuration and adaptation (#1028)
- Docs workflow fixes. (#1030)
- build: Replace
emilibwithrobin_hood(#995) - hot-fix: Use previous build of libmongocxx to avoid missing symbols (#1050)
- Remove unused C++ Wangle dep (#1047)
- Bugfix 1055: Unflake test_read_batch_time_stamp (#1058)
- Change tag format in docs build (#1062)
- Snapshot notebook typos (#1088)
- Update vcpkg dep (#1091)
- Enhancement/732/processing unit ecs model (#960)
- Add xfail to flaky tests (#1087)
- Add a mechanism to extend storage transaction lifetime to lifetime of… (#975)
- Tweak release docs (#1019)
- Change tmpdir to tmp_path (#1093)
- Remove unnecessary xfails (#1097)
- Add checks to see whether we should be validating version entries during compaction (#1099)
- 941 self hosted runners for ci (#997)
- Make dependency of pymongo optional in running (#1027)
- Add preliminary change for slowdown error test (#1064)
- Add mutex to ensure only single thread at pybind->c++ layer (#973)
- Issue #1017 Only warn if the "base" LMDB env is opened twice (#1022)
- Fix run-cmake action (#1034)
- Add a fallback to free GH runners, when there is a problem with the self-hosted ones (#1063)
- fix: Empty column handling improvements (#1049)
- Pin all our Github actions deps (#1090)
v4.1.0¶
Released 2023-11-01 · GitHub release
⭐ New APIs¶
In-memory Backend¶
You can now open ArcticDB with an in-memory backend,
from arcticdb import Arctic
ac = Arctic("mem://")
ac.create_library("test")
assert ac.list_libraries() == ["test"]
# Create libraries as normal. Each `Arctic` object manages its own in-memory storage, so the lifetime
# of your libraries and data is the same as the lifetime of the `Arctic` instance that owns them.
ac2 = Arctic("mem://")
assert ac2.list_libraries() == [] # ac2 is backed by different memory to ac so the "test" library is not returned
Query Builder¶
We now support a new "count" aggregator. You can invoke it with:
q = QueryBuilder()
q = q.groupby("grouping_column").agg({"a": "count"})
⚠️ Breaking and API Changes¶
LMDB Backend¶
This release includes a fix for issue #850 : Ensure that LMDB libraries are readable after being moved to a different location. The fix means that LMDB libraries created with arcticdb>=4.1.0 will not be readable by older clients and those clients must update.
This is because the fix stops us from serializing the LMDB library path (instead we always prefer the one in the Arctic URI), but older clients still expect to see the LMDB path serialized. Older clients reading a new LMDB library will in fact ignore the path passed in to the Arctic constructor and instead read the current working directory.
When you exceed the LMDB map size, we now raise a custom exception arcticdb.exceptions.LmdbMapFullError that explains how to re-open LMDB with a larger map size, whereas previously we raised a less helpful arcticdb.exceptions.InternalException.
🚀 Features¶
- Support
countaggregator with groupby (#948) - Warning for LMDB when two Arctic instances open over the same storage (#1000)
- Small LMDB Fixes: 2GiB map size for Windows, Validation before delete (#918)
- Custom exception when LMDB map is full (#1006)
- Memory backed API (#860)
- Allow ampersand in symbol names (#900)
- Add querybuilder notebook demo into the docs (#875)
- Extended testing against real cloud storages (#789)
- ASV Benchmarking published here (#962 #970)
- Preparatory work for RocksDB backend (#945)
🐛 Fixes¶
- Fix LZ4 decoding error issues that occurred with a mix of empty and non-empty columns (#964)
- Performance improvement for
read_batchwhen called with many symbols (4-5x improvement) (#870) - Convert semimap to switch which has resolved some segmentation fault issues (#912)
- Upgrade cUrl to 8.4.0 (#977)
- Cache open libraries in the LibraryManager (#990)
- Enhancement 914: Improve error messaging when string column encoding fails due to the presence of a non-string object (#933)
- Fix storage lock mutex implementation (#966)
- Make azure sdk stick to winhttp if possible (#851)
- Extra update checks (#539)
- maint: Indicate the non-support of PyArrow (#882)
- Add pymongo to the list of install dependencies (#891)
- conda-build: Run python tests for macos-latest (#873)
- fix: Change comparison in
test_hypothesis_{sum,mean}_agg(#931)
Uncategorized
- Fixes IFNDR issue due to mismatching inline/non-inline functions depending on the translation unit (fixes #943) (#949)
- docs: Post 4.0.0 release documentation (#967)
- Remove Black and pre-commit setup (#972)
- Improve string writing performance (#969)
- Skip docs in build.yml (#984)
- Move api docs from sphinx to mkdocs (#897)
- Document support for Mac on intel (#982)
- Update PAT for publish to master (#988)
- Fix ccache's non-existence exiting the workflow (#996)
- Refactor get_descriptions lib methods to be more consistent (#994)
- Fail docs build on sphix failure (#883)
- docs: Better document publishing release candidates on conda-forge (#901)
- conda-build: Unpin some dependencies (#888)
- docs: Reword conda-forge section mentioning
libevent-2.1.10(#905) - Update readme to reflect supported/beta status of Windows PyPi/MacOS conda-forge builds (#907)
- Skip flaky Mac test (#924)
- docs: Improve section "Building using mamba and conda-forge" (#917)
- fix interface in ManualClockVersionStore getter (#925)
- docs: Add high-level documentation of abstractions (#628)
- Update storage compatibility (#916)
- Update copyright notice (#939)
- Use new
get_libraryargument in ArcticDB_demo_lmdb.ipynb (#930)
v4.0.4¶
Released 2024-03-14 · GitHub release
🚀 Features¶
- Better backend storage retryable error handling and error message printout #1365
🐛 Fixes¶
- Stop allowing snapshotting tombstoned versions #1280
- Add a way to enable/disable silencing of errors when deleting a library #1271
v4.0.3¶
Released 2023-11-23 · GitHub release
This is a patch release to version 4.0 that backports some changes from master.
🚀 Features¶
- Add preliminary change for slowdown error test (#1070)
🐛 Fixes¶
- Empty column handling improvements (#1079)
- Use previous build of libmongocxx to avoid missing symbols (#1083)
- Remove docs publish step so we don't overwrite the docs (#1025)
- Remove Black and pre-commit setup (#1085)
v4.0.2¶
Released 2023-11-02 · GitHub release
This is a patch release to version 4.0 that backports some changes from master.
🐛 Fixes¶
Bugfix for a deadlock issue when using Python multithreading and batch_read (https://github.com/man-group/ArcticDB/pull/1021)
v4.0.1¶
Released 2023-11-02 · GitHub release
This is a patch release to version 4.0 that backports some fixes from master.
🚀 Features¶
- Allow ampersand in symbol names (#952)
🐛 Fixes¶
- Backport minor fixes to 4.0.x (#954), not user facing
v4.0.0¶
Released 2023-09-27 · GitHub release
⚠️ API changes¶
For Library.get_description_batch, Library.read_metadata_batch and Library.write_batch, a DataError object will now be returned in the position in the list returned corresponding to the symbol/version pair there was an issue reading/writing. Note this may require code changes to support the new error handling behaviour - as a result it is being considered a breaking change as described above.
- get description batch method: method rationalisation (#814)
- read metadata batch method: method rationalisation (#814)
- Write batch method: method rationalisation (#814)
🚀 Features¶
- Pandas 2.0 support (#343) (#540) (#804) (#846)
- Modifications have been made to the normalisation and denormalisation processes for
pandas.Seriesandpandas.DataFrameto match the new defaults in pandas 2.0. - Handling of 0-row DataFrames for improved correctness and usability.
- Empty Column are now properly handled, especially regarding the change of defaults for empty collections for Pandas 1.X and Pandas 2.X.
- Extended the tests to reflect changes in behaviour due to pandas 2.0's new defaults.
- Please note, PyArrow remains unsupported in this integration.
- Modifications have been made to the normalisation and denormalisation processes for
- conda-build: Bring support for Azure Blob Storage (#840) (#854) (#853) (#857)
- Add uri support for mongodb (#761)
- Code coverage analysis and report workflow (#783) (#784)
- Add documentation with doxygen (#736)
🐛 Fixes¶
- Update support status: Pandas DataFrame and Series backed by PyArrow are not supported (#882)
- Added pymongo to the list of installation dependencies (#891)
- Resolved dependency issues for the mergeability check step (#822)
- Fixed issue where AWS authentication wasn't used, even though the option was enabled (#843)
- Resolved issue of early read termination in 'has_symbol' (#836)
- Test: Ensured that
QueryBuilderis pickleable with all possible clauses (#861) - Fixed issue with the 'latest_only' option for the 'list_versions' method (#839)
- Added the ability for users to specify LMDB map size in the Arctic URI (#811)
- Fixed issue 767: Segfault in batch write with string columns has been resolved (#827)(874)
- Renamed ArcticNativeNotYetImplemented in a way that maintains backward compatibility, to fix issue #774 (#821)
- Modified Azure SDK to favour winhttp over libcurl on Windows for improved SSL verification (#851)
- Updated the maximum batch size for Azure operations (#878)
Uncategorized
- Maintenance: Added a minimal Security Policy (#823)
- Fixed documentation following an exception renaming (#824)
- Resolved issues in the publish step (#825)
- Added documentation for setting LMDB map size (#826)
- Incorporated notebooks into the documentation (#844)
- Maintenance: Removed unused definitions from protocol buffers (#856)
- Enhanced error handling to fail document build on Sphinx errors (#883)
- Maintenance: Replaced deprecated ZSTD_getDecompressedSize function (#855)
- Refactored non-functional library manager, addressing Issue #812 (#828)
- Made minor improvements to the documentation (#841)
- Improved handling of the deprecated S3 option "force_uri_lib_config" (#833)
- Corrected the release date of version 3.0.0 in README.md (#858)
v3.0.0¶
Released 2023-09-13 · GitHub release
🔒 Security + Forwards Incompatible Change¶
- S3 and Azure: Do not save sensitive or ephemeral config in the config library (https://github.com/man-group/ArcticDB/pull/803)
This fixes a security issue with ArcticDB where creds were kept in storage for:
- Azure
- AWS if the access keys are supplied in the URI instead of aws_auth=True.
These instructions explain how to upgrade your storage to remove the credentials. See also issue https://github.com/man-group/ArcticDB/issues/802 .
Compatibility matrix¶
| Storage | Library created with < v3. Library accessed with >= v3. |
Library created with or upgraded to >= v3. Library accessed with < v3. |
|---|---|---|
S3 with aws_auth=True |
Continues to work |
Raises InternalException: E_INVALID_ARGUMENT S3 Endpoint must be specified.Will work again if access=_RBAC_&secret=_RBAC_&force_uri_lib_config=true is in the URI passed to Arctic() |
S3 with access and secret. |
Will now use the creds passed to A future release might print a warning with instructions to upgrade. |
Raises InternalException: E_INVALID_ARGUMENT S3 Endpoint must be specified.Will work if force_uri_lib_config=true is in the URI passed to Arctic() |
| Azure | Operations on the library will fail with various internal error messages |
Full details:¶
What's happened?¶
Whilst reviewing our codebase we discovered a way that access-keys for ArcticDB storage backends could be saved into the storage in clear text.
This behavior was by design, but there is a chance that this has happened for some third-party users without being obvious.
This depends on the backend used and how you connect to the storage.
What is the exact scope of the issue?¶
If you created an ArcticDB library, either with an S3 bucket and passed the access-keys as part of the URI, or with Azure Blob Storage with the access-keys as part of the connection-string, then the credentials were saved into the storage account as part of the ArcticDB library config.
If you then shared that storage account with others using different roles or access-keys, then those users would in theory have been able to access the credentials used to create the library.
What have you done to address this?¶
We've updated ArcticDB so that all new libraries do not do this, even if the credentials are passed in with the URI/connection-string.
We've prepared a storage-update script which you can run to see if the credentials are there, and then remove them if they are.
What is the impact if I am affected?¶
If you have shared that storage account with anyone else using different roles/credentials, then your original credentials have also been accessible to those users.
It's possible those users recorded the credentials, and because those credentials must have had write-access to create the library, they could have made changes to the data or otherwise used those credentials.
What can I do to check if I'm affected?¶
See these instructions.
If needed you can check on previous versions of ArcticDB using the code referenced on github:
https://github.com/man-group/ArcticDB/issues/802#issuecomment-1697814768
What should I do if I am affected?¶
Follow these instructions.
This change is not forwards compatible, so users on earlier clients may need to upgrade:
- S3 libraries created with 3.0.0 will not be readable by earlier ArcticDB versions unless force_uri_lib_config=True in their connection string.
- Azure libraries created with 3.0.0 will not be readable by earlier ArcticDB versions.
Then,
- Rotate your credentials.
- If you've shared access to that storage account then please also check the integrity of your data and anything else accessible via those credentials.
What was the cause?¶
Previous use cases of ArcticDB had split storage accounts. One account was used to configure libraries and other accounts held the data for those libraries. Credentials to read those data-libraries were then stored into the configuration account and passed to users as needed for access to the data. This code was not caught during our review, and so was not disabled or removed when we made ArcticDB available to others. When we added Azure Blob storage support subsequently, the side-effect of saving anything in the connection-string to storage was not anticipated.
Having reviewed the codebase again we are confident that this was the only way that credentials could be saved into storage using our public API.
We plan to continue supporting our split storage solution for some users, but it should always be very clear when access-keys are being stored and what the risks are for that.
🚀 Features¶
- Conda-forge build now supports Azure Blob Storage
- Enhancement/728/make iclause responsible for processing structure (https://github.com/man-group/ArcticDB/pull/752)
- Add more info in the CI readme; Prepare var for real storage tests (https://github.com/man-group/ArcticDB/pull/663)
- Enhancement 702: Add option to create library if it does not exist when calling get_library (https://github.com/man-group/ArcticDB/pull/775)
- Enhancement 714: Expose library methods to list symbols with staged data, and to delete staged data (https://github.com/man-group/ArcticDB/pull/778)
- Enhancement 737: Support empty-type columns in QueryBuilder operations (https://github.com/man-group/ArcticDB/pull/794)
- conda-build: Adapt C++ test suite for Linux (https://github.com/man-group/ArcticDB/pull/713)
🐛 Fixes¶
- conda-build: Use default compilers for macOS (https://github.com/man-group/ArcticDB/pull/662)
- Bugfix/nativeversionstore write metadata batch should never return dataerror objects (https://github.com/man-group/ArcticDB/pull/782)
- Add handling of unspecified ca path in azure uri (https://github.com/man-group/ArcticDB/pull/771)
- Add dep. on packaging (https://github.com/man-group/ArcticDB/pull/795)
- Fix get_num_rows for NativeVersionStore (https://github.com/man-group/ArcticDB/pull/800)
Uncategorized
- First version of AWS S3 setup guide (https://github.com/man-group/ArcticDB/pull/708)
- fix(docs): central docs URL from API docs homepage (https://github.com/man-group/ArcticDB/pull/755)
- Add none type (https://github.com/man-group/ArcticDB/pull/646)
- Azure getting started guide (https://github.com/man-group/ArcticDB/pull/749)
- Docs fixes (https://github.com/man-group/ArcticDB/pull/762)
- Decouple storage headers from implementations & storage.hpp (https://github.com/man-group/ArcticDB/pull/763)
- Bugfix 554: Remove unused argument from write_batch (https://github.com/man-group/ArcticDB/pull/769)
- Partially revert https://github.com/man-group/ArcticDB/pull/763 for consistency (https://github.com/man-group/ArcticDB/pull/766)
- Make it clear to not commit directly to ArcticDB feedstock but use PRs instead (https://github.com/man-group/ArcticDB/pull/741)
- maint: pandas 2.0 forward compatible changes (https://github.com/man-group/ArcticDB/pull/540)
- test: Test the absence of implace modification on datetime64 normalization for pandas 2.0 (https://github.com/man-group/ArcticDB/pull/801)
- Update README.md (https://github.com/man-group/ArcticDB/pull/799)
- test: Remove test for fallback to pickle (https://github.com/man-group/ArcticDB/pull/805)
- Docs - update release number (https://github.com/man-group/ArcticDB/pull/816)
- conda-build: Pin cmake (https://github.com/man-group/ArcticDB/pull/815)
- Update releasing.md (https://github.com/man-group/ArcticDB/pull/817)
- ArcticDB 3.0.0 update BSL table (https://github.com/man-group/ArcticDB/pull/820)
v2.0.0¶
Released 2023-08-29 · GitHub release
This version contains breaking changes to the ArcticDB API. As per the SemVer versioning scheme, we have bumped the major version.
⚠️ API changes¶
-
Write batch metadata method: method rationalisation (#476)
-
Append batch metadata method: method rationalisation (#548)
For Library.write_metadata_batch and Library.append_batch, a DataError object will now be returned in the position in the list returned corresponding to the symbol/version pair there was an issue writing. Note this may require code changes to support the new error handling behaviour - as a result it is being considered a breaking change as described above.
See the docs for read_batch, which uses the same exception return mechanism.
- (Minor) The internal protobuf field
arcticc.pb2.descriptors_pb2.TypeDescriptor.MICROS_UTChas changed name toNANOSECONDS_UTC. This is only visible via theArcticAPI as a string viaget_description&get_description_batchondtypeattributes, so external users will only be affected by this if you are parsing these strings.
🚀 Features¶
- Projections, group-by, and aggregations added to the processing framework (#712)
- Reduce memory footprint of head and tail methods (#583)
- Per symbol parallelisation for write batch metadata method (#476)
- This can result in significant performance improvements when using this method over many symbols.
- Per symbol parallelisation for append batch metadata method (#548)
- This can result in significant performance improvements when using this method over many symbols.
🐛 Fixes¶
- Ensure content hash is copied during restore version + fixing timestamp-uniqueness-related flaky tests (#600)
- Restrict supported string types to type equality rather than has isinstance (#704)
- Incorrect initialisation of LoadParameter::load_from_time_ (#697)
- Ensure compact_incomplete and recursive normalization obey the library setting for pruning (#705)
Uncategorized
- Update release process to detail the process for pre-releases (#688)
- Unify release and pre-release hotfixing (#725)
- Skip test_diff_long_stream_descriptor_mismatch on MacOS (#693)
- maint: Remove
VariantStorage(#695) - maint: Rename
datetime64[ns]-related fields and datatypes (#592) - run C++ tests for conda build / ci (#486)
v1.6.2¶
Released 2023-10-04 · GitHub release
This release is a patch release, backporting bug-fixes to v1.6.1
🐛 Fixes¶
- Fixed a bug in key data retrieval, which could lead to incorrect behavior and segmentation faults (#912 )
v1.6.1¶
Released 2023-08-09 · GitHub release
🐛 Fixes¶
- Add a more strict check for chars in the symbol names (#627)
- Fix
as_ofwith timestamp reading entire version chain rather than just reading up-to the required version (#596)as_of=<timestamp>reads will be significantly faster for symbols with many versions
- Fix to ensure batch prune previous methods clean up index and data keys as well as version keys (https://github.com/man-group/ArcticDB/pull/623)
- Only log ErrorCategory::INTERNAL errors (https://github.com/man-group/ArcticDB/pull/676)
- Enable importing DataError from arcticdb (https://github.com/man-group/ArcticDB/pull/657)
- Refactor underlying segment write scheduling (#532)
- This can result in a significant performance improvement for large writes
Uncategorized
- Remove SemVer version validation as it doesnt support version strings such as 1.6.1rc0 (#678)
- Docs 672: Add docstring for DataError class (#686)
- Black output diff rather than just erroring in build (#685)
- Correct docs for read_batch return type (https://github.com/man-group/ArcticDB/pull/664)
v1.6.0¶
Released 2023-07-25 · GitHub release
API Changes¶
- Modify read_batch to return a
DataErrorobject rather than raising an exception (#629)
For Library.read_batch, a DataError object will now be returned in the position in the list returned corresponding to the symbol/version pair there was an issue retrieving. This contains the symbol and version requested, and the exception string thrown. For two well-defined categories of error, the error category and specific error code are also included:
ErrorCategory.MISSING_DATA - ErrorCode.E_NO_SUCH_VERSION: The version requested by the user does not exist
ErrorCategory.STORAGE - ErrorCode.E_KEY_NOT_FOUND: At least one of the keys required to read the specified version does not exist in the storage.
Otherwise these fields of the DataError object are left as None.
See also the API docs.
- Accessing a Library that does not exist now throws an
arcticdb.exceptions.LibraryNotFoundrather than an internal exception.
🚀 Features¶
- Support negative integers in
as_of(#589)
This PR enables negative indexing to select "the last-but-nth version". This is equivalent to negative indexing in Python. See API docs.
For example:
read(...as_of=0...) will select the first version
read(...as_of=-1...) will select the most recent version
read(...as_of=-2...) will select the version prior to the most recent version
🐛 Fixes¶
Various fixes to make our use of LMDB more correct. These only affect LMDB-backed Arctic instances (not S3). These should resolve the segfaults users have been experiencing with LMDB.
- Only open library once in the interpreter lifetime (#585)
- Fix for LMDB DBI Handling (#597)
- Delete relevant part of LMDB tree upon library delete (#601)
Also,
- Fix for write batch with dedup (#595)
- Fix for read batch when as of is TimeStamp (#617)
- Fix numeric isin filtering for some cases with a mix of signed and unsigned integers (#604)
Uncategorized
- Update demo notebook (#570)
- fix: Remove uneeded
FMT_COMPILE(#578) - build: Use Pandas 2.0 forward compatible API (#582)
- Make batch tests much faster (#586)
- Remove tests skips in test_storage_lock.cpp for Windows (#550)
- Update python line in issue-template so it works on windows (#608)
- Update faq.md (#616)
- Windows is Beta (#610)
- Rename lib to be consistent - lib vs library (#622)
- Update docs to point how to use AWS_PROFILE (#619)
- maint: Remove
VariantStorageFactoryand its implementations (#625) - docs: Add development guidelines for testing combinations (#644)
- conda-build: Pin pybind11 to < 2.11 (#647)
- Add checklist to pull request template (#643)
v1.5.0¶
Released 2023-07-11 · GitHub release
🚀 Features¶
- ☁️ ArcticDB now supports Azure Blob Storage! (#427 #464) ☁️.
- Note: This does functionality is not yet available in the Conda release of ArcticDB - it is only available in the PyPI release.
- Performance improvements for:
write_batch(#467)
- Added optional library encoding option (#401)
- Add environment variable controlling whether AWS S3 should verify SSL certificates (
S3Storage.VerifySSL). This defaults to1- set to0to disable. (#553) - Specify compilations optimizations for Windows build (#543)
- Improve documentation for Arctic 1.0 -> ArcticDB migration (#546)
- Add test for filtering down the string pool with Nones and NaNs (#533)
- ArcticDB now supports logging to a file for log messages (#573)
🐛 Fixes¶
- Rename write_batch_pickle to write_pickle_batch. Note that this is a breaking API change. (#516)
- Fix compilation errors issued by clang-16. (#542)
- Fix for read batch when filtering by column. Previously this would raise an error - it now works. (#567)
- Suppress Pandas warning about nanoseconds being discarded (#571)
v1.4.1¶
Released 2023-06-27 · GitHub release
🚀 Features¶
- Significant performance improvements for
get_description_batch, exploiting per-symbol parallelism. Bench-marking suggests an order of magnitude improvement for 1000 symbols.
🐛 Fixes¶
get_description_batchdatetimes now include UTC tzinfo (fixing the batch equivalent of issue #197).
v1.4.0¶
Released 2023-06-23 · GitHub release
Notices
¶
1.4.0 has changed the default value of prune_previous_versions.
Prior to 1.4.0, if you did not pass a specific value into prune_previous_versions, prior versions would have been removed after successful completion of the write, update or append operation. By changing the default value, previous versions will now be kept by default.
To maintain the behaviour of previous releases, pass prune_previous_versions=True or manually call prune_previous_versions.
🚀 Features¶
- Support an option to allow Arctic to override storage endpoint and credentials. Useful if replicating a bucket containing existing ArcticDB libraries to another region. (#502)
Other Changes:¶
- If
list_symbolsis expected to be slow (no recent cache), a warning will be printed. (#489) - Major refactor to the analytical engine of ArcticDB (#471)
prune_previous_versionshas been set toFalseby default (#485)- Fix logging levels not being configurable from env var (#490)
- Add UTC timezone info to dates returned by SymbolDescription::get_description (#480)
- Use RFC 3986 URL encoding for S3 interactions (#503)
Uncategorized
- Demo notebook (#477)
- conda-build: Use fmt < 10 (#479)
- Add guide on how to release ArcticDB to PyPi and conda-forge (#478)
- Try removing enum-compat (#491)
- Address post merging comments from prune_previous_versions set defaul… (#487)
- Add requirements file (#501)
- Remove reference to Arcticc and fix file config (#508)
v1.3.0¶
Released 2023-06-12 · GitHub release
🍎 New Platforms¶
- This release coincides with the release of 1.3.0 on MacOS Apple Silicon on conda-forge!
🚀 Features¶
- Multiple improvements to the reliability and stability of the symbol list caching logic. (#393)
- Add get_uri function to the Arctic instance (#433)
🐛 Fixes¶
- Significant performance improvements for
read_batch,read_metadata_batchandget_description_batch(#415 #435)- Note that the performance improvements for
read_batchwill largely only be visible if noQueryBuilderquery is passed in.
- Note that the performance improvements for
fast_tombstone_alloption has been removed - in code this is assumed to always be true. (#366)- Simplify log config and fix #426 #453 (#474)
Uncategorized
- rename isin test to avoid being skipped (#418)
- github: Adapt bug report template (#429)
- github: switching action for micromamba (#424)
- #146 Add Black formatting to build (#431)
- Higher utility GitHub Actions changes (#438)
- fix black formatting issues previous PR (#444)
- dev: Add simple
pre-commitsetup (#445) - build: Do not build with Remotery by default (#466)
- follow-up: dev: Add simple
pre-commitsetup (#448) - cmake: Improve the resolution of LZ4 (#451)
- fix: Required adaptations for MSVC 14.29.30133 support (#459)
v1.2.1¶
Released 2023-05-31 · GitHub release
This is a bugfix release:
- #419 #409 Build fixes to enable the Conda build (and therefore publishing to conda-forge)
- #388 ArcticDB will now allow updates on data if the existing data was written prior to v1.1 regardless of whether that existing data is sorted or not
ArcticDB distributes:
-
wheels for Windows and Linux on PyPI, the latest being installable with:
pip install --update arcticdb -
conda packages for MacOS and Linux on conda-forge, the latest being installable with:
mamba install -c conda-forge --update arcticdb
v1.2.0¶
Released 2023-05-22 · GitHub release
🚀 Features¶
✅ defragment_symbol_data method added (#180)
- This will defragment fragmented symbols. Fragmented symbols are typically caused by frequent small appends (e.g. 1 row every hour) and result in sub-optimal read performance. Reading defragmented symbols can result in significantly improved performance compared to a more fragmented equivalent!
✅ Write API for column-level statistics added. (#253)
- The structures created using this API will later be used to improve the performance of queries in later versions. As of version 1.2.0 however, the structures are not consumed at query time.
✅ Configuration variables set via environment variables are now case insensitive (#364)
🐛 Bug fixes¶
✅ add_to_snapshot and remove_from_snapshot no longer leave unreachable data on disk if a symbol-version pair being removed from a snapshot is the last reference to this version (#253)
✅ Reads with QueryBuilder parameters that contain a groupby/aggregation clauses now only fetch data segments containing columns relevant to the query (#253)
v1.1.0¶
Released 2023-05-10 · GitHub release
New Platforms¶
Version 1.1 includes the first official release of the Windows version of ArcticDB!
Versions 1.1 includes the following caveats:
- Please have a recent Visual C++ Redistributable for Visual Studio 2015-2022 installed.
- Windows does not support fixed-width NumPy strings and so will not be able to write fixed-width strings contained within a NumPy array.
- Writing pickled data can fail on machines with limited memory, see #340 for details and a workaround.
- The LMDB store on Windows pre-allocates the max storage size on disk, so we limited the size to 128MB. We will provide an option to increase the size in the future (#229).
Version 1.1 now supports Python 3.11!
New Features¶
batch_get_descriptor method added (#219)
batch_get_metadata method added (#220)
Both batch methods do not achieve optimal parallelism - we are aiming to address in 1.2.
Changes¶
1.1 pins to Pandas < 2.0 whilst we address a few remaining compatibility issues
(#237)
1.1 supports Protobuf V3 as well as V4
Out-of-order data updates now raises exceptions should they prevent future indexed reads (#203)
PCRE is now statically linked (#321)
stream id which is a confusing term has been renamed to symbol in error messages and should be better understood (#311)
Pickled data supports up-to 4GB (#260)
Debugging toolbox added (#209)
Introduced a base exception type
arcticdb.exceptions.ArcticException. Exceptions are exposed in arcticdb.exceptions module with the following hierarchy:
RuntimeError
└-- ArcticException
|-- ArcticNativeNotYetImplemented
|-- DuplicateKeyException
|-- MissingDataException
|-- NoDataFoundException
|-- NoSuchVersionException
|-- NormalizationException
|-- PermissionException
|-- SchemaException
|-- SortingException
| └-- UnsortedDataException
|-- StorageException
|-- StreamDescriptorMismatch
└-- InternalException
Next version:¶
NEW FEATURE: defragment_symbol_data method added (#180)