From 1032a485ef0b0683cb49b7734f13236db384a115 Mon Sep 17 00:00:00 2001 From: David Edell Date: Tue, 3 Mar 2026 15:26:51 -0500 Subject: [PATCH 1/5] Updated REST APIs to return correct error codes, and updated dtnma-tools to bring in fixes for SQL concurrency causing reliability issues. --- anms-core/anms/routes/network_manager.py | 16 ++++++++-------- anms-core/anms/routes/transcoder.py | 16 ++++++++++------ deps/dtnma-tools | 2 +- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/anms-core/anms/routes/network_manager.py b/anms-core/anms/routes/network_manager.py index d773513..81d6c46 100644 --- a/anms-core/anms/routes/network_manager.py +++ b/anms-core/anms/routes/network_manager.py @@ -21,7 +21,7 @@ # the prime contract 80NM0018D0004 between the Caltech and NASA under # subcontract 1658085. # -from fastapi import APIRouter, status +from fastapi import APIRouter, status, HTTPException import requests from pydantic import BaseModel @@ -51,7 +51,7 @@ async def nm_get_version(): try: request = requests.get(url=url) except Exception: - return {} + raise HTTPException(status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail="ConnectTimeout") return request.json() @@ -63,7 +63,7 @@ def nm_get_agents(): try: request = requests.get(url=url) except Exception: - return -1 + raise HTTPException(status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail="ConnectTimeout") return request.json() @@ -90,20 +90,20 @@ def do_nm_put_hex_eid(eid: str, ari: str): url = nm_url + "/agents/eid/{}/send?form=hex".format(_prepare_url(eid)) logger.info('post to nm manager %s with eid %s and data %s' % (url, eid, ari)) - try: + try: request = requests.post(url=url, data=ari, headers={'Content-Type': 'text/plain'}, timeout=(2.0, 8.0) # 2s for manager to connect, 8s for it to respond ) except requests.exceptions.ConnectTimeout: - return status.HTTP_504_GATEWAY_TIMEOUT + raise HTTPException(status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail="ConnectTimeout") except requests.exceptions.ReadTimeout: - return status.HTTP_504_GATEWAY_TIMEOUT + raise HTTPException(status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail="ReadTimeout") except requests.exceptions.Timeout: - return status.HTTP_504_GATEWAY_TIMEOUT + raise HTTPException(status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail="Timeout") except Exception: - return status.HTTP_500_INTERNAL_SERVER_ERROR + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR) return request.status_code diff --git a/anms-core/anms/routes/transcoder.py b/anms-core/anms/routes/transcoder.py index cc1b38f..3a4bc23 100644 --- a/anms-core/anms/routes/transcoder.py +++ b/anms-core/anms/routes/transcoder.py @@ -22,8 +22,7 @@ import time import asyncio -from fastapi import APIRouter, Depends -from fastapi import status +from fastapi import APIRouter, Depends, status, HTTPException from fastapi_pagination import Page, Params from fastapi_pagination.ext.async_sqlalchemy import paginate @@ -144,7 +143,7 @@ async def transcoder_put_await_str(input_ari: str): def transcoder_incoming_str(input_ari: str): return _transcoder_put_str(input_ari) -def _transcoder_put_str(input_ari: str): +def transcoder_put_str(input_ari: str): input_ari = input_ari.strip() transcoder_log_id = None send_to_transcode = False @@ -188,16 +187,21 @@ async def transcoder_send_ari_str(eid: str, ari: str): if info.parsed_as != "pending": break if retries <= 0: - return { "idinfo" : idinfo, "info" : info, "status" : 504 } + raise HTTPException(status_code=504, + detail={ "idinfo" : idinfo, "info" : info, "status" : "transcoder timeout" }) + retries -= 1 if info.parsed_as == "ERROR": - return { "idinfo" : idinfo, "info" : info, "status" : 500 } + raise HTTPException(status_code=500, + detail={ "idinfo" : idinfo, "info" : info, "status" : 500 }) # Publish state = do_nm_put_hex_eid( eid, info.cbor ) - return { "idinfo" : idinfo, "info" : info, "status" : state } + except HTTPException as e: + e.detail = { "idinfo" : idinfo, "info" : info, "status" : e.status_code } + raise e except Exception as e: logger.exception(e) return status.HTTP_500_INTERNAL_SERVER_ERROR diff --git a/deps/dtnma-tools b/deps/dtnma-tools index 58e5557..20a4746 160000 --- a/deps/dtnma-tools +++ b/deps/dtnma-tools @@ -1 +1 @@ -Subproject commit 58e5557570064b6fc2a1719a0eb9f90fa15c94d6 +Subproject commit 20a47469690c1be8b7a1a5114003c7bcafa3f20e From 15052f64dd1e81c81b9c6ebdf210493e886d2e1f Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 6 Mar 2026 09:11:17 -0500 Subject: [PATCH 2/5] Add REFDA startup to allow ipn-scheme managers all access --- testenv.Containerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/testenv.Containerfile b/testenv.Containerfile index 2b861e2..6cea562 100644 --- a/testenv.Containerfile +++ b/testenv.Containerfile @@ -175,6 +175,7 @@ RUN systemctl enable ion bpecho@4 refda-ion && \ mkdir -p /var/run/ion # Runtime config for this container +COPY deps/dtnma-tools/integration-test-ion/startup.uri /etc/refda/startup.uri COPY deps/test-ion-configs/agent-2.rc /etc/ion/node-2.rc COPY deps/test-ion-configs/agent-3.rc /etc/ion/node-3.rc From 67003a7026dac56a3663db820c497da306f015a7 Mon Sep 17 00:00:00 2001 From: David Edell Date: Fri, 6 Mar 2026 09:17:42 -0500 Subject: [PATCH 3/5] Updating all deps references. --- deps/dtnma-ace | 2 +- deps/dtnma-adms | 2 +- deps/dtnma-camp | 2 +- deps/dtnma-tools | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deps/dtnma-ace b/deps/dtnma-ace index d7aa3ce..b303fd3 160000 --- a/deps/dtnma-ace +++ b/deps/dtnma-ace @@ -1 +1 @@ -Subproject commit d7aa3ceabf750b4579e64f1c89911ab4c1d5d980 +Subproject commit b303fd3aff45070619e9fd273dbc3506f4dc597f diff --git a/deps/dtnma-adms b/deps/dtnma-adms index 2b95b67..e9b600d 160000 --- a/deps/dtnma-adms +++ b/deps/dtnma-adms @@ -1 +1 @@ -Subproject commit 2b95b67d42fde342a6c5459ee8b586da9b67abec +Subproject commit e9b600d2dfdf965dec71e86ffcb5932fd964b803 diff --git a/deps/dtnma-camp b/deps/dtnma-camp index d4dc7c2..0813bc4 160000 --- a/deps/dtnma-camp +++ b/deps/dtnma-camp @@ -1 +1 @@ -Subproject commit d4dc7c27430254177e2bb056399d2c321e7f95c4 +Subproject commit 0813bc49bf9ae859bf67521077f923574d18a28e diff --git a/deps/dtnma-tools b/deps/dtnma-tools index 20a4746..cd454d0 160000 --- a/deps/dtnma-tools +++ b/deps/dtnma-tools @@ -1 +1 @@ -Subproject commit 20a47469690c1be8b7a1a5114003c7bcafa3f20e +Subproject commit cd454d0467b2b2c9422b3646006a5445e2da5514 From b19e3330a5916aa301ced31d236645f24db45892 Mon Sep 17 00:00:00 2001 From: David Edell Date: Fri, 6 Mar 2026 10:43:10 -0500 Subject: [PATCH 4/5] Force CI build to run with no-cache --- .github/workflows/build-test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index 8577e8a..ca63a40 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -43,9 +43,9 @@ jobs: DOCKER_IMAGE_TAG=${{ github.sha }} echo "DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG}" >> $GITHUB_ENV - name: Build ANMS - run: ${DOCKER_CMD} compose ${ANMS_COMPOSE_OPTS} build + run: ${DOCKER_CMD} compose ${ANMS_COMPOSE_OPTS} build --no-cache - name: Build Agents - run: ${DOCKER_CMD} compose ${TESTENV_COMPOSE_OPTS} build + run: ${DOCKER_CMD} compose ${TESTENV_COMPOSE_OPTS} build --no-cache - name: Build Volume run: | ./create_volume.sh ./puppet/modules/apl_test/files/anms/tls From 691307124c1e2f988936465f656fa7f76b648c22 Mon Sep 17 00:00:00 2001 From: David Edell Date: Fri, 13 Mar 2026 12:39:40 -0400 Subject: [PATCH 5/5] Revert "Force CI build to run with no-cache" This reverts commit b19e3330a5916aa301ced31d236645f24db45892. --- .github/workflows/build-test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index ca63a40..8577e8a 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -43,9 +43,9 @@ jobs: DOCKER_IMAGE_TAG=${{ github.sha }} echo "DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG}" >> $GITHUB_ENV - name: Build ANMS - run: ${DOCKER_CMD} compose ${ANMS_COMPOSE_OPTS} build --no-cache + run: ${DOCKER_CMD} compose ${ANMS_COMPOSE_OPTS} build - name: Build Agents - run: ${DOCKER_CMD} compose ${TESTENV_COMPOSE_OPTS} build --no-cache + run: ${DOCKER_CMD} compose ${TESTENV_COMPOSE_OPTS} build - name: Build Volume run: | ./create_volume.sh ./puppet/modules/apl_test/files/anms/tls