Skip to content

Commit dc132f6

Browse files
committed
fix: reuse BytePlus serverless gateway
1 parent 20ba775 commit dc132f6

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

frontend/service/studio_release_server/deploy.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,20 @@ def _https_endpoint(gateway_service: Any) -> str:
454454
return ""
455455

456456

457+
def _find_reusable_serverless_gateway(gateways: list[Any]) -> Any | None:
458+
"""Return an existing running serverless gateway when quota blocks a new one."""
459+
return next(
460+
(
461+
gateway
462+
for gateway in gateways
463+
if getattr(gateway, "type", None) == "serverless"
464+
and (getattr(gateway, "status", None) or getattr(gateway, "message", None))
465+
== "Running"
466+
),
467+
None,
468+
)
469+
470+
457471
def _create_serverless_gateway(apig: Any) -> str:
458472
from volcenginesdkapig import (
459473
CreateGatewayRequest,
@@ -567,7 +581,11 @@ def _ensure_gateway_binding(service: Any, function_id: str) -> str:
567581
gateways = list(getattr(gateway_response, "items", []) or [])
568582
gateway = _find_named(gateways, _GATEWAY_NAME)
569583
if gateway is None:
570-
gateway_id = _create_serverless_gateway(apig)
584+
gateway = _find_reusable_serverless_gateway(gateways)
585+
if gateway is None:
586+
gateway_id = _create_serverless_gateway(apig)
587+
else:
588+
gateway_id = str(gateway.id)
571589
else:
572590
if getattr(gateway, "type", None) != "serverless":
573591
raise RuntimeError(f"Gateway {_GATEWAY_NAME} is not serverless.")

tests/test_studio_release_server.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,26 @@ def _upload() -> None:
12471247
assert attempts == 3
12481248

12491249

1250+
def test_release_server_reuses_running_serverless_gateway() -> None:
1251+
gateways = [
1252+
SimpleNamespace(
1253+
id="provisioning-serverless",
1254+
type="serverless",
1255+
status="Creating",
1256+
),
1257+
SimpleNamespace(id="running-dedicated", type="dedicated", status="Running"),
1258+
SimpleNamespace(
1259+
id="running-serverless",
1260+
type="serverless",
1261+
status="Running",
1262+
),
1263+
]
1264+
1265+
gateway = release_deploy._find_reusable_serverless_gateway(gateways)
1266+
1267+
assert gateway.id == "running-serverless"
1268+
1269+
12501270
def test_release_bucket_is_private_and_tagged_do_not_delete(
12511271
monkeypatch: pytest.MonkeyPatch,
12521272
) -> None:

0 commit comments

Comments
 (0)