Skip to content

Commit 7626293

Browse files
committed
merged develop
2 parents e252fb4 + 2728be8 commit 7626293

File tree

13 files changed

+146
-32
lines changed

13 files changed

+146
-32
lines changed

CHANGELOG.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,102 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
# [Unity Release 25.1] - 2025-04-08
9+
10+
- SPS Version 2.6.0 (new)
11+
- OGC API Version 2.0.0 (unchanged)
12+
- OGC Python Client Version 2.0.1 (unchanged)
13+
14+
## Overview
15+
16+
This release contains several performance improvements to increase the scalability of the SPS system, including:
17+
- New EC2 types available when using the CWL DAG or CWL Modular DAG, including EC2 types with attached SSD storage.
18+
- Prioritization of downstream tasks of running DAGs with respect to upstream tasks of queued DAGs.
19+
- Removal access to shared EFS partition
20+
- Using EC2 types with increased CPU and memory for the core EKS node and core Airflow Pods
21+
22+
Also, the Airflow database is backed up every day, and restored when the SPS system is redeployed.
23+
24+
Additionally, this release includes much expanded support for the SRL (Sample Return Lander) use case,
25+
demonstrating triggering and chaining of data procesisng workflows for generation pof EDR and RDR products
26+
and image format conversion.
27+
28+
Finally, all documentation has been revised and updated.
29+
30+
## Caveats
31+
- Unless ports are specifically opened, this SPS installation is only accessible
32+
through the top-level MDPS proxies. Users will need to login first with their
33+
Cognito credentials, then with their Airflow credentials. This issue will be fixed
34+
when the Airflow/Cognito integration is complete.
35+
- For the same reason, unless ports are specifically opened, the Airflow and OGC
36+
APIs will not be accessible.
37+
38+
## Upgrade Guide
39+
40+
- This release is backward compatible with the previous version: it includes additional functionality and
41+
performance improvements, but there are no API changes.
42+
- Because some configuration parameters have changed, the .tfvars files used to deploy EKS, Karpenter and Airflow via Terraform
43+
should be re-generated to pick up the new values.
44+
45+
## Repositories
46+
47+
- unity-sps: <https://github.com/unity-sds/unity-sps/releases/tag/2.6.0>
48+
- unity-sps-ogc-processes-api: <https://github.com/unity-sds/unity-sps-ogc-processes-api/releases/tag/2.0.0>
49+
- unity-sps-ogc-processes-api-client-python: <https://github.com/unity-sds/unity-sps-ogc-processes-api-client-python/releases/tag/2.0.1>
50+
51+
## Epics
52+
53+
- EPIC: SPS Infrastructure
54+
- [[Enhancement]: Update the Management Console to use the latest SDS version](https://github.com/unity-sds/unity-sps/issues/280)
55+
- [[Bug]: Fix placement of Pods over Nodes](https://github.com/unity-sds/unity-sps/issues/304)
56+
- [[Enhancement] Remove access to shared EFS partition in the CWL DAG](https://github.com/unity-sds/unity-sps/issues/318)
57+
- [[Bug]: Update CPU and memory limits for worker nodes](https://github.com/unity-sds/unity-sps/issues/330)
58+
- [[New Feature]: Experiment with using EC2 types with attached storage for better performance](https://github.com/unity-sds/unity-sps/issues/339)
59+
- [[New Feature]: Log the EC2 Instance Id](https://github.com/unity-sds/unity-sps/issues/357)
60+
- [[New Feature]: Scale up the SPS core resources](https://github.com/unity-sds/unity-sps/issues/358)
61+
- [[New Feature]: Prioritize downstream tasks](https://github.com/unity-sds/unity-sps/issues/382)
62+
- EPIC: Deployment Enhancements
63+
- [[New Feature]: Migrate database content during SPS upgrades](https://github.com/unity-sds/unity-sps/issues/253)
64+
- EPIC: Documentation Updates
65+
- [[Documentation] OGC Documentation Enhancements](https://github.com/unity-sds/unity-sps/issues/274)
66+
- [[Documentation]: Revise and update the OGC API Jupyter Notebook](https://github.com/unity-sds/unity-sps/issues/294)
67+
- [[Documentation]: Provide a high level overview of the OGC Processes API](https://github.com/unity-sds/unity-sps/issues/295)
68+
- [[Documentation]: Revise and update the OGC tutorial using CURL](https://github.com/unity-sds/unity-sps/issues/296)
69+
- [[Documentation]: SPS overview for developers](https://github.com/unity-sds/unity-sps/issues/297)
70+
- EPIC: Continue Application Package Standardization
71+
- [[New Feature]: Modularize the EMIT workflow](https://github.com/unity-sds/unity-sps/issues/302)
72+
- EPIC: TROPESS Support
73+
- [[Enhancement]: Modular DAG Stage Out step too verbose](https://github.com/unity-sds/unity-sps/issues/307)
74+
- EPIC: Demonstrate Space Use Case
75+
- [[Enhancement]Create SRL Initiator for EDRGen (.dat + .emd)](https://github.com/unity-sds/unity-sps/issues/287)
76+
- [[New Feature]: Airflow DAG for EDRgen](https://github.com/unity-sds/unity-sps/issues/278)
77+
- [[New Feature]: Airflow DAG for RDRgen](https://github.com/unity-sds/unity-sps/issues/279)
78+
- [[New Feature]: Initiators for EDRgen processing](https://github.com/unity-sds/unity-sps/issues/283)
79+
- [[New Feature]: Initiators for RDRgen processing](https://github.com/unity-sds/unity-sps/issues/284)
80+
- [[New Feature]: Prototype routing via a DAG](https://github.com/unity-sds/unity-sps/issues/308)
81+
- [[New Feature]: Investigate router DAG configuration via Airflow Configuration, SSM, S3 file](https://github.com/unity-sds/unity-sps/issues/324)
82+
83+
## Docker Containers
84+
85+
- ghcr.io/unity-sds/unity-sps/sps-airflow:2.6.0
86+
- ghcr.io/unity-sds/unity-sps/sps-docker-cwl:2.6.0
87+
- ghcr.io/unity-sds/unity-sps-ogc-processes-api/unity-sps-ogc-processes-api:2.0.0
88+
89+
## Documentation
90+
91+
- For Administrators:
92+
- [SPS Deployment with Terraform](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/admin-guide/sps-deployment-with-terraform)
93+
- [Interacting with an Existing SPS Deployment](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/admin-guide/interacting-with-an-existing-sps-deployment)
94+
- [SPS Airflow Custom Docker Image Build Instructions](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/admin-guide/sps-airflow-custom-docker-image-build-instructions)
95+
- [SPS Post Deployment Operations](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/admin-guide/sps-post-deployment-operations)
96+
- [SPS Deployment with Marketplace](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/admin-guide/sps-deployment-with-marketplace)
97+
- For Deverlopers:
98+
- [OGC Processes API Overview](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/developers-guide/ogc-processes-api-overview)
99+
- [Tutorial: Using the OGC Processes API with CURL](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/developers-guide/tutorial-using-the-ogc-processes-api-with-curl)
100+
- [Tutorial: Using the OGC processes API with Python](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/developers-guide/tutorial-using-the-ogc-processes-api-with-python)
101+
- For Users:
102+
- [Tutorial: Register and Execute a CWL Workflow](https://unity-sds.gitbook.io/docs/developer-docs/science-processing/docs/users-guide/tutorial-register-and-execute-a-cwl-workflow)
103+
8104
# [Unity Release 24.4] - 2025-01-02
9105

10106
## Tags
@@ -41,6 +137,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
41137

42138
## Epics
43139

140+
Release tickets: https://github.com/orgs/unity-sds/projects/3/views/53
141+
44142
- EPIC: Airflow/WPS-T Integration
45143
- [[[New Feature]: Publish ogc-api-python-client to PyPi]](https://github.com/unity-sds/unity-sps/issues/225)
46144
- EPIC: `SPS Infrastructure`

airflow/dags/cwl_dag.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,11 @@ def setup(ti=None, **context):
149149
logging.info(f"Selecting log level: {context['params']['log_level']}.")
150150

151151

152-
setup_task = PythonOperator(task_id="Setup", python_callable=setup, dag=dag)
152+
setup_task = PythonOperator(task_id="Setup", python_callable=setup, dag=dag, weight_rule="upstream")
153153

154154
cwl_task = KubernetesPodOperator(
155155
retries=1,
156+
weight_rule="upstream",
156157
task_id="cwl_task",
157158
namespace=POD_NAMESPACE,
158159
name="cwl-task-pod",
@@ -238,7 +239,11 @@ def cleanup(**context):
238239

239240

240241
cleanup_task = PythonOperator(
241-
task_id="Cleanup", python_callable=cleanup, dag=dag, trigger_rule=TriggerRule.ALL_DONE
242+
task_id="Cleanup",
243+
python_callable=cleanup,
244+
dag=dag,
245+
trigger_rule=TriggerRule.ALL_DONE,
246+
weight_rule="upstream",
242247
)
243248

244249
chain(setup_task.as_setup(), cwl_task, cleanup_task.as_teardown(setups=setup_task))

airflow/dags/cwl_dag_modular.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,12 @@ def setup(ti=None, **context):
206206
logging.info(f"Selecting log level: {context['params']['log_level']}.")
207207

208208

209-
setup_task = PythonOperator(task_id="Setup", python_callable=setup, dag=dag)
209+
setup_task = PythonOperator(task_id="Setup", python_callable=setup, dag=dag, weight_rule="upstream")
210210

211211

212212
cwl_task_processing = KubernetesPodOperator(
213213
retries=0,
214+
weight_rule="upstream",
214215
task_id="cwl_task_processing",
215216
namespace=POD_NAMESPACE,
216217
name="cwl-task-pod",
@@ -288,7 +289,11 @@ def cleanup(**context):
288289

289290

290291
cleanup_task = PythonOperator(
291-
task_id="Cleanup", python_callable=cleanup, dag=dag, trigger_rule=TriggerRule.ALL_DONE
292+
task_id="Cleanup",
293+
python_callable=cleanup,
294+
dag=dag,
295+
trigger_rule=TriggerRule.ALL_DONE,
296+
weight_rule="upstream",
292297
)
293298

294299

airflow/helm/values.tmpl.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ extraEnv: |
353353
- name: AIRFLOW__SCHEDULER__SCHEDULER_HEARTBEAT_SEC
354354
value: "1"
355355
- name: AIRFLOW__KUBERNETES__WORKER_PODS_CREATION_BATCH_SIZE
356-
value: "8"
356+
value: "16"
357357
- name: AIRFLOW__WEBSERVER__NAVBAR_COLOR
358358
value: "${webserver_navbar_color}"
359359
- name: AIRFLOW__WEBSERVER__INSTANCE_NAME
@@ -363,6 +363,6 @@ extraEnv: |
363363
- name: AIRFLOW__SCHEDULER__MIN_FILE_PROCESS_INTERVAL
364364
value: "5"
365365
- name: AIRFLOW__CORE__DEFAULT_POOL_TASK_SLOT_COUNT
366-
value: "1000"
366+
value: "1024"
367367
- name: AIRFLOW__WEBSERVER__EXPOSE_CONFIG
368368
value: "True"

airflow/plugins/unity_sps_utils.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,17 @@
33
"""
44

55
import os
6-
from datetime import datetime
76

87
from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator
98
from kubernetes.client import models as k8s
109

1110
# Shared constants
1211
POD_NAMESPACE = "sps" # The Kubernetes namespace within which the Pod is run (it must already exist)
13-
POD_LABEL = "cwl_task" + datetime.now().strftime(
14-
"%Y%m%d_%H%M%S_%f"
15-
) # unique pod label to assure each job runs on its own pod
12+
POD_LABEL = "cwl_task"
1613

1714
# Note: each Pod is assigned the same label to assure that (via the anti-affinity requirements)
1815
# two Pods with the same label cannot run on the same Node
19-
SPS_DOCKER_CWL_IMAGE = "ghcr.io/unity-sds/unity-sps/sps-docker-cwl:2.5.8"
16+
SPS_DOCKER_CWL_IMAGE = "ghcr.io/unity-sds/unity-sps/sps-docker-cwl:2.5.10"
2017

2118
NODE_POOL_DEFAULT = "airflow-kubernetes-pod-operator"
2219
NODE_POOL_HIGH_WORKLOAD = "airflow-kubernetes-pod-operator-high-workload"

pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "unity-sps"
7-
version = "2.4.0"
7+
version = "2.6.0"
88
authors = [
9-
{ name = "Drew Meyers", email = "[email protected]" },
109
{ name = "Luca Cinquini", email = "[email protected]" },
11-
{ name = "Nikki Tebaldi", email = "[email protected]" },
12-
{ name = "Brad Lunsford", email = "[email protected]" }
10+
{ name = "Grace Llewellyn", email = "[email protected]" },
11+
{ name = "Brad Lunsford", email = "[email protected]" },
12+
{ name = "Nikki Tebaldi", email = "[email protected]" }
1313
]
1414
description = "The science processing service area of Unity."
1515
classifiers = [

terraform-unity/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,10 @@ terraform apply -no-color 2>&1 | tee apply_output.txt
188188

189189
| Name | Description | Type | Default | Required |
190190
|------|-------------|------|---------|:--------:|
191-
| <a name="input_airflow_docker_images"></a> [airflow\_docker\_images](#input\_airflow\_docker\_images) | Docker images for the associated Airflow services. | <pre>object({<br> airflow = object({<br> name = string<br> tag = string<br> })<br> })</pre> | <pre>{<br> "airflow": {<br> "name": "ghcr.io/unity-sds/unity-sps/sps-airflow",<br> "tag": "2.5.8"<br> }<br>}</pre> | no |
191+
| <a name="input_airflow_docker_images"></a> [airflow\_docker\_images](#input\_airflow\_docker\_images) | Docker images for the associated Airflow services. | <pre>object({<br> airflow = object({<br> name = string<br> tag = string<br> })<br> })</pre> | <pre>{<br> "airflow": {<br> "name": "ghcr.io/unity-sds/unity-sps/sps-airflow",<br> "tag": "2.6.0"<br> }<br>}</pre> | no |
192192
| <a name="input_airflow_webserver_password"></a> [airflow\_webserver\_password](#input\_airflow\_webserver\_password) | The password for the Airflow webserver and UI. | `string` | n/a | yes |
193193
| <a name="input_airflow_webserver_username"></a> [airflow\_webserver\_username](#input\_airflow\_webserver\_username) | The username for the Airflow webserver and UI. | `string` | `"admin"` | no |
194-
| <a name="input_dag_catalog_repo"></a> [dag\_catalog\_repo](#input\_dag\_catalog\_repo) | Git repository that stores the catalog of Airflow DAGs. | <pre>object({<br> url = string<br> ref = string<br> dags_directory_path = string<br> })</pre> | <pre>{<br> "dags_directory_path": "airflow/dags",<br> "ref": "develop",<br> "url": "https://github.com/unity-sds/unity-sps.git"<br>}</pre> | no |
194+
| <a name="input_dag_catalog_repo"></a> [dag\_catalog\_repo](#input\_dag\_catalog\_repo) | Git repository that stores the catalog of Airflow DAGs. | <pre>object({<br> url = string<br> ref = string<br> dags_directory_path = string<br> })</pre> | <pre>{<br> "dags_directory_path": "airflow/dags",<br> "ref": "main",<br> "url": "https://github.com/unity-sds/unity-sps.git"<br>}</pre> | no |
195195
| <a name="input_deployment_name"></a> [deployment\_name](#input\_deployment\_name) | The name of the deployment. | `string` | `""` | no |
196196
| <a name="input_helm_charts"></a> [helm\_charts](#input\_helm\_charts) | Helm charts for the associated services. | <pre>map(object({<br> repository = string<br> chart = string<br> version = string<br> }))</pre> | <pre>{<br> "airflow": {<br> "chart": "airflow",<br> "repository": "https://airflow.apache.org",<br> "version": "1.15.0"<br> },<br> "keda": {<br> "chart": "keda",<br> "repository": "https://kedacore.github.io/charts",<br> "version": "v2.15.1"<br> }<br>}</pre> | no |
197197
| <a name="input_installprefix"></a> [installprefix](#input\_installprefix) | The install prefix for the service area (unused) | `string` | `""` | no |
@@ -201,7 +201,7 @@ terraform apply -no-color 2>&1 | tee apply_output.txt
201201
| <a name="input_mcp_ami_owner_id"></a> [mcp\_ami\_owner\_id](#input\_mcp\_ami\_owner\_id) | The owner ID of the MCP AMIs | `string` | `"794625662971"` | no |
202202
| <a name="input_ogc_processes_docker_images"></a> [ogc\_processes\_docker\_images](#input\_ogc\_processes\_docker\_images) | Docker images for the associated OGC Processes API services. | <pre>object({<br> ogc_processes_api = object({<br> name = string<br> tag = string<br> })<br> git_sync = object({<br> name = string<br> tag = string<br> })<br> redis = object({<br> name = string<br> tag = string<br> })<br> })</pre> | <pre>{<br> "git_sync": {<br> "name": "registry.k8s.io/git-sync/git-sync",<br> "tag": "v4.2.4"<br> },<br> "ogc_processes_api": {<br> "name": "ghcr.io/unity-sds/unity-sps-ogc-processes-api/unity-sps-ogc-processes-api",<br> "tag": "2.0.0"<br> },<br> "redis": {<br> "name": "redis",<br> "tag": "7.4.0"<br> }<br>}</pre> | no |
203203
| <a name="input_project"></a> [project](#input\_project) | The project or mission deploying Unity SPS. | `string` | `"unity"` | no |
204-
| <a name="input_release"></a> [release](#input\_release) | The software release version. | `string` | `"24.4"` | no |
204+
| <a name="input_release"></a> [release](#input\_release) | The software release version. | `string` | `"25.1"` | no |
205205
| <a name="input_service_area"></a> [service\_area](#input\_service\_area) | The service area owner of the resources being deployed. | `string` | `"sps"` | no |
206206
| <a name="input_tags"></a> [tags](#input\_tags) | Tags for the deployment (unused) | `map(string)` | <pre>{<br> "empty": ""<br>}</pre> | no |
207207
| <a name="input_venue"></a> [venue](#input\_venue) | The MCP venue in which the resources will be deployed. | `string` | n/a | yes |

0 commit comments

Comments
 (0)