Skip to content

Commit f4fa278

Browse files
authored
v6.15.0 release (#669)
**Related Issue(s):** - None **Description:** - Added STAC_FASTAPI_ES_COERCE_GLOBAL env var to disable automatic type conversion and enable strict type checking at the index level. - Implemented CQL2 Abstract Syntax Tree (AST) structure for more efficient query parsing and better support for datetime-based indexes. - Made ES_MAX_URL_LENGTH configurable via environment variable to match server-side http.max_initial_line_length settings. - Replaced manual existence checks with native ES/OS op_type="create" for faster bulk duplicate detection and better error handling. - Atomic Redis queue operations using MULTI/EXEC pipelines to prevent data inconsistency between ZSET and HASH. - Added periodic lock refreshing to the item queue worker to prevent distributed lock expiration during long batch processes. - Fixed handling of empty collection_ids in query filters to prevent invalid empty terms filters. **PR Checklist:** - [x] Code is formatted and linted (run `pre-commit run --all-files`) - [x] Tests pass (run `make test`) - [x] Documentation has been updated to reflect changes, if applicable - [x] Changes are added to the changelog
1 parent 092e5b1 commit f4fa278

11 files changed

Lines changed: 34 additions & 27 deletions

File tree

CHANGELOG.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,29 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
99

1010
### Added
1111

12+
### Changed
13+
14+
### Fixed
15+
16+
### Removed
17+
18+
### Updated
19+
20+
## [v6.15.0] - 2026-04-04
21+
22+
### Added
23+
1224
- Added coerce control via `STAC_FASTAPI_ES_COERCE_GLOBAL` env var to enable strict type checking by disabling automatic type conversion at the index level. [#649](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/649)
1325
- Added CQL2 Abstract Syntax Tree (AST) structure for efficient query parsing and datetime-based indexes. [#659](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/659)
1426
- Made `ES_MAX_URL_LENGTH` configurable via environment variable (default: `4096`). This value should match the `http.max_initial_line_length` setting in your Elasticsearch/OpenSearch server configuration. [#656](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/656)
1527

16-
### Changed
17-
1828
### Fixed
1929

2030
- Fixed bulk duplicate detection: replaced manual `exist_ok` pre-check with ES/OS native `op_type="create"`. Bulk operations now correctly raise `ItemAlreadyExistsError` when `RAISE_ON_BULK_ERROR=true`, or count duplicates as "skipped" when `false`, instead of throwing raw `BulkIndexError`. [#638](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/issues/638)
2131
- Fixed `add_collections_to_body` to handle empty `collection_ids` gracefully, preventing an invalid empty `terms` filter from being added to the query body. [#656](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/656)
2232
- Made Redis queue operations atomic using pipelines (MULTI/EXEC) in `queue_items`, `mark_items_processed`, `remove_item`, and `save_failed_items` to prevent ghost entries where IDs exist in ZSET but data is missing from HASH.
2333
- Added periodic lock refresh (every 60s) to `item_queue_worker` to prevent distributed lock expiration during long-running batch processing. The worker now stops processing when the lock is lost and checks `owned()` before releasing to avoid releasing another worker's lock.
2434

25-
### Removed
26-
27-
### Updated
28-
2935

3036
## [v6.14.1] - 2026-03-24
3137

@@ -845,7 +851,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
845851
- Use genexp in execute_search and get_all_collections to return results.
846852
- Added db_to_stac serializer to item_collection method in core.py.
847853

848-
[Unreleased]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.14.1...main
854+
[Unreleased]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.15.0...main
855+
[v6.15.0]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.14.1...v6.15.0
849856
[v6.14.1]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.14.0...v6.14.1
850857
[v6.14.0]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.13.0...v6.14.0
851858
[v6.13.0]: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/compare/v6.12.0...v6.13.0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
"""library version."""
2-
__version__ = "6.14.1"
2+
__version__ = "6.15.0"

stac_fastapi/elasticsearch/pyproject.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ keywords = [
2828
]
2929
dynamic = ["version"]
3030
dependencies = [
31-
"stac-fastapi-core==6.14.1",
32-
"sfeos-helpers==6.14.1",
31+
"stac-fastapi-core==6.15.0",
32+
"sfeos-helpers==6.15.0",
3333
"elasticsearch[async]~=8.19.1",
3434
"uvicorn~=0.23.0",
3535
"starlette>=0.35.0,<0.36.0",
@@ -40,7 +40,7 @@ Homepage = "https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch"
4040

4141
[project.optional-dependencies]
4242
catalogs = [
43-
"stac-fastapi-core[catalogs]==6.14.1",
43+
"stac-fastapi-core[catalogs]==6.15.0",
4444
]
4545
dev = [
4646
"pytest~=8.0",
@@ -51,8 +51,8 @@ dev = [
5151
"httpx>=0.24.0,<0.28.0",
5252
"redis~=6.4.0",
5353
"retry~=0.9.2",
54-
"stac-fastapi-core[sentry]==6.14.1",
55-
"stac-fastapi-core[redis]==6.14.1",
54+
"stac-fastapi-core[sentry]==6.15.0",
55+
"stac-fastapi-core[redis]==6.15.0",
5656
]
5757
docs = [
5858
"mkdocs~=1.4.0",
@@ -62,7 +62,7 @@ docs = [
6262
"retry~=0.9.2",
6363
]
6464
redis = [
65-
"stac-fastapi-core[redis]==6.14.1",
65+
"stac-fastapi-core[redis]==6.15.0",
6666
]
6767
server = [
6868
"uvicorn[standard]~=0.23.0",

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@
262262
app_config = {
263263
"title": os.getenv("STAC_FASTAPI_TITLE", "stac-fastapi-elasticsearch"),
264264
"description": os.getenv("STAC_FASTAPI_DESCRIPTION", "stac-fastapi-elasticsearch"),
265-
"api_version": os.getenv("STAC_FASTAPI_VERSION", "6.14.1"),
265+
"api_version": os.getenv("STAC_FASTAPI_VERSION", "6.15.0"),
266266
"settings": settings,
267267
"extensions": extensions,
268268
"client": CoreClient(
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
"""library version."""
2-
__version__ = "6.14.1"
2+
__version__ = "6.15.0"

stac_fastapi/opensearch/pyproject.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ keywords = [
2828
]
2929
dynamic = ["version"]
3030
dependencies = [
31-
"stac-fastapi-core==6.14.1",
32-
"sfeos-helpers==6.14.1",
31+
"stac-fastapi-core==6.15.0",
32+
"sfeos-helpers==6.15.0",
3333
"opensearch-py~=2.8.0",
3434
"opensearch-py[async]~=2.8.0",
3535
"uvicorn~=0.23.0",
@@ -41,7 +41,7 @@ Homepage = "https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch"
4141

4242
[project.optional-dependencies]
4343
catalogs = [
44-
"stac-fastapi-core[catalogs]==6.14.1",
44+
"stac-fastapi-core[catalogs]==6.15.0",
4545
]
4646
dev = [
4747
"pytest~=8.0",
@@ -52,16 +52,16 @@ dev = [
5252
"httpx>=0.24.0,<0.28.0",
5353
"redis~=6.4.0",
5454
"retry~=0.9.2",
55-
"stac-fastapi-core[sentry]==6.14.1",
56-
"stac-fastapi-core[redis]==6.14.1",
55+
"stac-fastapi-core[sentry]==6.15.0",
56+
"stac-fastapi-core[redis]==6.15.0",
5757
]
5858
docs = [
5959
"mkdocs~=1.4.0",
6060
"mkdocs-material~=9.0.0",
6161
"pdocs~=1.2.0",
6262
]
6363
redis = [
64-
"stac-fastapi-core[redis]==6.14.1",
64+
"stac-fastapi-core[redis]==6.15.0",
6565
]
6666
server = [
6767
"uvicorn[standard]~=0.23.0",

stac_fastapi/opensearch/stac_fastapi/opensearch/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@
261261
app_config = {
262262
"title": os.getenv("STAC_FASTAPI_TITLE", "stac-fastapi-opensearch"),
263263
"description": os.getenv("STAC_FASTAPI_DESCRIPTION", "stac-fastapi-opensearch"),
264-
"api_version": os.getenv("STAC_FASTAPI_VERSION", "6.14.1"),
264+
"api_version": os.getenv("STAC_FASTAPI_VERSION", "6.15.0"),
265265
"settings": settings,
266266
"extensions": extensions,
267267
"client": CoreClient(
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
"""library version."""
2-
__version__ = "6.14.1"
2+
__version__ = "6.15.0"

stac_fastapi/sfeos_helpers/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ keywords = [
3030
dynamic = ["version"]
3131
dependencies = [
3232
"tenacity~=9.1.2",
33-
"stac-fastapi.core==6.14.1",
33+
"stac-fastapi.core==6.15.0",
3434
]
3535

3636
[project.optional-dependencies]

stac_fastapi/sfeos_helpers/stac_fastapi/sfeos_helpers/filter/datetime_optimizer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ def extract_from_node(
424424
results.append(
425425
(
426426
current_collections.copy(),
427-
f"{dates[i]}/{dates[i+1]}",
427+
f"{dates[i]}/{dates[i + 1]}",
428428
)
429429
)
430430

0 commit comments

Comments
 (0)