From 0595723f66bec374471aafab3a9412ea4f95371c Mon Sep 17 00:00:00 2001 From: Giuliano Mega Date: Tue, 4 Feb 2025 13:01:14 -0300 Subject: [PATCH 1/2] Minor improvements to download API (#1092) * chore: improve error messages in upload API * chore: remove unreachable (dead) code * fix: API integration test --- codex/rest/api.nim | 12 ++++++------ tests/integration/testrestapi.nim | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/codex/rest/api.nim b/codex/rest/api.nim index 134aa8d2..a64d26cf 100644 --- a/codex/rest/api.nim +++ b/codex/rest/api.nim @@ -179,7 +179,7 @@ proc initDataApi(node: CodexNodeRef, repoStore: RepoStore, router: var RestRoute trace "Handling file upload" var bodyReader = request.getBodyReader() if bodyReader.isErr(): - return RestApiResponse.error(Http500) + return RestApiResponse.error(Http500, msg = bodyReader.error()) # Attempt to handle `Expect` header # some clients (curl), wait 1000ms @@ -190,10 +190,13 @@ proc initDataApi(node: CodexNodeRef, repoStore: RepoStore, router: var RestRoute var mimetype = request.headers.getString(ContentTypeHeader).some if mimetype.get() != "": + let mimetypeVal = mimetype.get() var m = newMimetypes() - let extension = m.getExt(mimetype.get(), "") + let extension = m.getExt(mimetypeVal, "") if extension == "": - return RestApiResponse.error(Http422, "The MIME type is not valid.") + return RestApiResponse.error( + Http422, "The MIME type '" & mimetypeVal & "' is not valid." + ) else: mimetype = string.none @@ -231,9 +234,6 @@ proc initDataApi(node: CodexNodeRef, repoStore: RepoStore, router: var RestRoute finally: await reader.closeWait() - trace "Something went wrong error" - return RestApiResponse.error(Http500) - router.api(MethodGet, "/api/codex/v1/data") do() -> RestApiResponse: let json = await formatManifestBlocks(node) return RestApiResponse.response($json, contentType = "application/json") diff --git a/tests/integration/testrestapi.nim b/tests/integration/testrestapi.nim index 52b722d6..f1f2299f 100644 --- a/tests/integration/testrestapi.nim +++ b/tests/integration/testrestapi.nim @@ -200,7 +200,7 @@ twonodessuite "REST API": let response = client1.uploadRaw("some file contents", headers) check response.status == "422 Unprocessable Entity" - check response.body == "The MIME type is not valid." + check response.body == "The MIME type 'hello/world' is not valid." test "node retrieve the metadata", twoNodesConfig: let headers = newHttpHeaders( From 54d499be419e6b82204f328f98c14508e0b2eabf Mon Sep 17 00:00:00 2001 From: Slava <20563034+veaceslavdoina@users.noreply.github.com> Date: Tue, 4 Feb 2025 23:22:34 +0200 Subject: [PATCH 2/2] docker: add BOOTSTRAP_NODE_URL to Docker entrypoint (#1098) --- docker/docker-entrypoint.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 2ec840e9..d883f0eb 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -9,6 +9,34 @@ if [[ -n "${ENV_PATH}" ]]; then set +a fi +# Bootstrap node from URL +if [[ -n "${BOOTSTRAP_NODE_URL}" ]]; then + BOOTSTRAP_NODE_URL="${BOOTSTRAP_NODE_URL}/api/codex/v1/spr" + WAIT=${BOOTSTRAP_NODE_URL_WAIT:-300} + SECONDS=0 + SLEEP=1 + # Run and retry if fail + while (( SECONDS < WAIT )); do + SPR=$(curl -s -f -m 5 -H 'Accept: text/plain' "${BOOTSTRAP_NODE_URL}") + # Check if exit code is 0 and returned value is not empty + if [[ $? -eq 0 && -n "${SPR}" ]]; then + export CODEX_BOOTSTRAP_NODE="${SPR}" + echo "Bootstrap node: CODEX_BOOTSTRAP_NODE=${CODEX_BOOTSTRAP_NODE}" + break + else + # Sleep and check again + echo "Can't get SPR from ${BOOTSTRAP_NODE_URL} - Retry in $SLEEP seconds / $((WAIT - SECONDS))" + sleep $SLEEP + fi + done +fi + +# Stop Codex run if unable to get SPR +if [[ -n "${BOOTSTRAP_NODE_URL}" && -z "${CODEX_BOOTSTRAP_NODE}" ]]; then + echo "Unable to get SPR from ${BOOTSTRAP_NODE_URL} in ${BOOTSTRAP_NODE_URL_WAIT} seconds - Stop Codex run" + exit 1 +fi + # Parameters if [[ -z "${CODEX_NAT}" ]]; then if [[ "${NAT_IP_AUTO}" == "true" && -z "${NAT_PUBLIC_IP_AUTO}" ]]; then