feat: add resumable file archive jobs and offline verification

This commit is contained in:
2026-09-23 10:50:49 +08:00
parent 2d8467e50c
commit 6eb429e21f
19 changed files with 1160 additions and 15 deletions

View File

@@ -15,6 +15,12 @@ E2E_CREDENTIALS_FILE="$E2E_DIR/credentials.json"
cleanup() {
"$E2E_DOCKER" stop "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
"$E2E_DOCKER" container rm "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
if [ -d "$E2E_DIR/archive-job" ]; then
for e2e_artifact in "$E2E_DIR/archive-job"/.lock "$E2E_DIR/archive-job"/manifest.json "$E2E_DIR/archive-job"/batch-000001.json; do
if [ -f "$e2e_artifact" ]; then unlink "$e2e_artifact"; fi
done
rmdir "$E2E_DIR/archive-job" >/dev/null 2>&1 || true
fi
for e2e_artifact in "$E2E_DIR"/*; do
if [ -f "$e2e_artifact" ]; then
unlink "$e2e_artifact"
@@ -250,4 +256,25 @@ assert status_retention == 401, status_retention
print("console_task_data=ok succeeded_tasks=%d logout=ok unauthorized_after_logout=%d" % (sum(item.get("state") == "SUCCEEDED" for item in items), status))
PY
printf '%s\n' "[archive] durable job and offline verification"
E2E_NAMESPACE=$(python3 - "$E2E_CREDENTIALS_FILE" <<'PYCODE'
import json, sys
print(json.load(open(sys.argv[1], encoding="utf-8"))["namespace_id"])
PYCODE
)
"$E2E_DOCKER" run --rm --network bridge --link "$E2E_MYSQL:mysql" \
--env ORBIT_MYSQL_DSN="$E2E_DSN" --volume "$E2E_DIR:/run/orbit" \
--entrypoint /usr/local/bin/orbit-admin "$E2E_IMAGE" retention archive \
--namespace "$E2E_NAMESPACE" --kind tasks --revision 1 --directory /run/orbit/archive-job > "$E2E_DIR/archive-result.json"
"$E2E_DOCKER" run --rm --network none --volume "$E2E_DIR:/run/orbit" \
--entrypoint /usr/local/bin/orbit-admin "$E2E_IMAGE" retention verify-archive \
--directory /run/orbit/archive-job > "$E2E_DIR/archive-verified.json"
python3 - "$E2E_DIR/archive-result.json" "$E2E_DIR/archive-verified.json" <<'PYCODE'
import json, sys
result, verified = [json.load(open(p, encoding="utf-8")) for p in sys.argv[1:]]
assert result == verified
assert result["completed"] is True and result["batches"] == 1 and result["roots"] == 0
print("durable_archive=ok offline_verification=ok roots=0 completed=true")
PYCODE
printf '%s\n' "console-e2e=passed image=$E2E_IMAGE url=$E2E_URL"