Highlights
- [**Blob downloader**](https://github.com/NVIDIA/aistore/blob/main/docs/blob_downloader.md)
- [**Multi-homing**: support multiple user-facing network interfaces](https://aiatscale.org/blog/2024/02/16/multihome-bench)
- **Versioning and remote sync**
- execute in presence of out-of-band changes/deletions
- support _latest version_: the capability to check in-cluster metadata and, possibly, `GET`, download, prefetch, and/or copy the latest remote (object) version
- _remote synch_: same as above, plus: remove in-cluster object if its remote counterpart is not present (any longer)
- both _latest version_ and _remote sync_ are supported in a variety of APIs (including `GET` primitive) and tools (CLI, `aisloader`)
- **Intra-cluster n-way mirroring**
- to withstand a loss of node(s) erasure coding is now optional
- **AWS S3 (frontend) API**
- multipart V2 (major upgrade); other productization
- listing very large S3 datasets
- support [presigned S3](https://github.com/NVIDIA/aistore/blob/main/docs/s3compat.md) requests (beta)
- **List objects** (job): show diff: in-cluster vs. remote
- **Prefetch** (job): V2 (major upgrade)
- **Copy/transform** (jobs): V2 (major upgrade)
- AWS S3: migrate AWS backend to AWS SDK V2
- Azure Blob Storage: transition to latest stable native SDK
> See also: [aistore features](https://github.com/NVIDIA/aistore?tab=readme-ov-file#features) and brief [overview](https://github.com/NVIDIA/aistore/blob/main/docs/overview.md#at-a-glance).
Core
- NVMe multipathing: pick alternative block-stats location !6432
- rotate logs; remove redundant interfaces, other refactoring !6433
- cold `GET`: add stats !6435
- http(s) clients: unify naming, construction; reduce code !6438, !6439
- don't escape URL paths; up cli !6441
- `dsort`: sort records (minor) !6445
- core: micro-optimize copy-buffer !6447
- `list-objects` utilities and helpers; rerun `list-objects` code-gen: refactor and optimize; cleanup !6450, !6451
- intra-cluster transport: zero-copy header !6455
- Go API: (object, multi-object): ref !6456
- add 'read header timeout'; docs: aistore environment variables !6459
- core: support target multi-homing - comma-separated IPs (part one) !6464
- package 'ais': continued refactoring; up cli !6466
- support multiple user-facing network interfaces (multi-homing) !6467, !6468
- when setting backend two (or more) times a row !6469
- core: (begin, abort, commit) job - corner cases !6470
- in-cluster K8s environment: prune and cleanup, comment, and document !6471
- multi-object `PUT` - variations !6473, !6474
- unify `PUT` and `PROMOTE` destination naming !6475
- `APPEND` (verb) to append if exists; amend metadata (major) !6476
- EC: refactor and simplify erasure-coding datapath; docs: remove all gitlab references !6477
- `list-objects`: enforce intra-cluster access, validate !6480
- EC: remove redundant state; simplify !6481
- Go API `get-bmd`; follow-up !6483
- EC: cleanup manager: remove rlock and unused map - micro-optimize !6490
- copy bucket: extend the command to sync remote bucket !6491
- extend 'copy bucket' to sync remote !6494, !6495, !6497, !6498, !6499
- don't compare checksums of different (checksum) types !6496
- when deleting non-present (remote) object !6502
- move transform/copy-bucket from 'mirror' package to 'xs' !6503
- don't create data mover in a single-node cluster !6504
- multi-object transform/copy (job): add missing cleanup !6506
- multi-object transform & copy !6507
- core: abort all (jobs) of a given kind; CLI 'ais stop'; strings: Damerau-Levensthein !6508
- revamp target initialization !6509
- copy/transform remote, non-present !6510
- revamp target initialization !6512, !6513
- [API change] get latest version (feature) !6516
- amend Prefetch; flush `atime` cache when shutting down !6517
- amend metadata cache flushing logic (`atime`, `prefetch`, `is-dirty`) !6518
- core: remote reader to support 'latest version' !6519
- extend config ROM; follow-up !6520
- Prefetch v2 !6521
- backend error formatting; `notification-listener` name !6522
- [API change] Prefetch v2; multi-object operations !6523
- Prefetch v2; cold-get stats; put size !6524
- [config change] versioning vs remote version changed or deleted !6525, !6526
- add 'remote-deleted' stats counter; Prefetch: test more !6528
- AWS backend `not-found`; job status; other cleanup !6529
- core: refactor 'copy-object' interface, prep to sync remote => in-cluster !6531
- [Cluster Config change] versioning vs remote version: remote _changed_, _deleted_ !6532
- copy/transform (bucket | multi-object); intra-cluster notifications !6533
- revise/simplify 'is-not-exist' check; `ldp.reader` to honor `sync-remote` option !6537
- pre-parse (`log-modules`, `log-level`); micro-optimize !6538
- amend error handling: `not-found` vs list iterator; OOS !6539
- jobs ("xactions"): add and log non-critical errors; `join(error)` and fiends !6540
- [API change] list-objects to report 'version-changed' (new) !6541
- `list-objects` to report 'version-changed' (new) !6543, !6545
- `list-objects` to report: 'version-changed', 'deleted' !6546
- `list-objects` to support (in-cluster <=> remote) diff !6547, !6548
- copy/transform with an option to sync remote: prune destination !6549
- copy/transform --sync: add stress test, extract "pruning" logic !6550
- revise and refine _object write transaction_ (OWT) !6554, !6555
- Go API: amend 'wait-idle' helper method !6558
- copy/transform '--sync': use probabilistic filtering !6559
- refactor `list-range-prefix` iterator !6560
- multi-object copy/transform with '--sync' option !6561
- S3 API (on the front): fix `list-objects` !6562, !6563
- multi-object copy/transform with '--sync' option !6564
- core: reset idle timer; xaction names (micro-optimizations) !6565
- core: `ETag` in response headers !6569
- S3 API (frontend): validate object names; multipart pathnames !6570
- copy/transform with '--sync' option: add scripted test !6571, !6573
- backend: special case to return 404 instead of 403 !6575
- productize Azure backend !6576, !6578, !6580
- S3 multipart: write-through all parts !6585
- multipart upload: write-through all parts !6586
- multipart upload: add extended error message; add stress test !6587
- all supported backends: revisit range read (make it consistent across) !6589
- introduce blob downloader (new) !6592
- xaction (job) descriptor: remove unused specifiers !6593
- blob downloader: add dedicated (non-generic) control path !6595
- blob downloader (new) !6596, !6599, !6603
- multipart upload: fix `s3cmd` to run elsewhere !6600, !6601
- blob downloader (new) !6605, !6606, !6608
- blob downloader (new); remote AIS cluster !6613
- silent `HEAD(bucket)` !6614
- leverage erasure coding to provide intra-cluster mirroring (new) !6615, !6616
- blob downloader (new) !6618
- S3 (frontend): support presigned S3 requests (new) !6621
- intra-cluster mirroring: add integration test (no limit) !6622
- blob downloader (new) !6628, !6629, !6631, !6632, !6633, !6639
- add target's `get-cold-blob` interface; refactoring !6634
- AWS backend: `nil` client !6636
- Prefetch via blob-downloader: add 'blob-threshold' option !6637, !6638
- blob-downloader: user abort; expected checksum !6646
- Azure: `ETag` as object version; build !6647
- Azure: transition from preview to stable 1.x (major) !6648
- AWS backend: use `sync.Map` instead !6649, !6651
- (AWS, GCP) backend: log extended error info; RC5 !6653
- S3: presigned S3 requests; bucket config: add `max-page-size` !6657
Python