Skip to content

Commit 1602c80

Browse files
[Feature]: Add ability to disable background processing and only run Web UI and API server #2901 (#2902)
* add server setting * add logic to disable background processing * update docs for new setting * Rename to DSTACK_SERVER_BACKGROUND_PROCESSING_DISABLED --------- Co-authored-by: Victor Skvortsov <vds003@gmail.com>
1 parent 3c9a9d5 commit 1602c80

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

docs/docs/reference/environment-variables.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ For more details on the options below, refer to the [server deployment](../guide
123123
- `DSTACK_DB_POOL_SIZE`{ #DSTACK_DB_POOL_SIZE } - The client DB connections pool size. Defaults to `20`,
124124
- `DSTACK_DB_MAX_OVERFLOW`{ #DSTACK_DB_MAX_OVERFLOW } - The client DB connections pool allowed overflow. Defaults to `20`.
125125
- `DSTACK_SERVER_BACKGROUND_PROCESSING_FACTOR`{ #DSTACK_SERVER_BACKGROUND_PROCESSING_FACTOR } - The number of background jobs for processing server resources. Increase if you need to process more resources per server replica quickly. Defaults to `1`.
126+
- `DSTACK_SERVER_BACKGROUND_PROCESSING_DISABLED`{ #DSTACK_SERVER_BACKGROUND_PROCESSING_DISABLED } - Disables background processing if set to any value. Useful to run only web frontend and API server.
126127

127128
??? info "Internal environment variables"
128129
The following environment variables are intended for development purposes:

src/dstack/_internal/server/app.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,10 @@ async def lifespan(app: FastAPI):
151151
)
152152
if settings.SERVER_S3_BUCKET is not None or settings.SERVER_GCS_BUCKET is not None:
153153
init_default_storage()
154-
scheduler = start_background_tasks()
154+
if settings.SERVER_BACKGROUND_PROCESSING_ENABLED:
155+
scheduler = start_background_tasks()
156+
else:
157+
logger.info("Background processing is disabled")
155158
dstack_version = DSTACK_VERSION if DSTACK_VERSION else "(no version)"
156159
logger.info(f"The admin token is {admin.token.get_plaintext_or_error()}", {"show_path": False})
157160
logger.info(
@@ -161,7 +164,8 @@ async def lifespan(app: FastAPI):
161164
for func in _ON_STARTUP_HOOKS:
162165
await func(app)
163166
yield
164-
scheduler.shutdown()
167+
if settings.SERVER_BACKGROUND_PROCESSING_ENABLED:
168+
scheduler.shutdown()
165169
await gateway_connections_pool.remove_all()
166170
service_conn_pool = await get_injector_from_app(app).get_service_connection_pool()
167171
await service_conn_pool.remove_all()

src/dstack/_internal/server/settings.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
os.getenv("DSTACK_SERVER_BACKGROUND_PROCESSING_FACTOR", 1)
4343
)
4444

45+
SERVER_BACKGROUND_PROCESSING_DISABLED = (
46+
os.getenv("DSTACK_SERVER_BACKGROUND_PROCESSING_DISABLED") is not None
47+
)
48+
SERVER_BACKGROUND_PROCESSING_ENABLED = not SERVER_BACKGROUND_PROCESSING_DISABLED
49+
4550
SERVER_EXECUTOR_MAX_WORKERS = int(os.getenv("DSTACK_SERVER_EXECUTOR_MAX_WORKERS", 128))
4651

4752
MAX_OFFERS_TRIED = int(os.getenv("DSTACK_SERVER_MAX_OFFERS_TRIED", 25))
@@ -113,5 +118,5 @@
113118

114119
UPDATE_DEFAULT_PROJECT = os.getenv("DSTACK_UPDATE_DEFAULT_PROJECT") is not None
115120
DO_NOT_UPDATE_DEFAULT_PROJECT = os.getenv("DSTACK_DO_NOT_UPDATE_DEFAULT_PROJECT") is not None
116-
SKIP_GATEWAY_UPDATE = os.getenv("DSTACK_SKIP_GATEWAY_UPDATE", None) is not None
117-
ENABLE_PROMETHEUS_METRICS = os.getenv("DSTACK_ENABLE_PROMETHEUS_METRICS", None) is not None
121+
SKIP_GATEWAY_UPDATE = os.getenv("DSTACK_SKIP_GATEWAY_UPDATE") is not None
122+
ENABLE_PROMETHEUS_METRICS = os.getenv("DSTACK_ENABLE_PROMETHEUS_METRICS") is not None

0 commit comments

Comments
 (0)