dbos 1.3.0a3__tar.gz → 1.3.0a4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dbos-1.3.0a3 → dbos-1.3.0a4}/PKG-INFO +1 -1
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_sys_db.py +37 -32
- {dbos-1.3.0a3 → dbos-1.3.0a4}/pyproject.toml +1 -1
- {dbos-1.3.0a3 → dbos-1.3.0a4}/LICENSE +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/README.md +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/__init__.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/__main__.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_admin_server.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_app_db.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_classproperty.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_client.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_conductor/conductor.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_conductor/protocol.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_context.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_core.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_croniter.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_dbos.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_dbos_config.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_debug.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_docker_pg_helper.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_error.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_event_loop.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_fastapi.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_flask.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_kafka.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_kafka_message.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_logger.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/env.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/script.py.mako +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_outcome.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_queue.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_recovery.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_registrations.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_roles.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_scheduler.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/__init__.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/application_database.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/system_database.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_serialization.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_tracer.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_utils.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_workflow_commands.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/_github_init.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/_template_init.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/cli.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/dbos-config.schema.json +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/py.typed +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/__init__.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/atexit_no_ctor.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/atexit_no_launch.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/classdefs.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/client_collateral.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/client_worker.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/conftest.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/dupname_classdefs1.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/dupname_classdefsa.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/more_classdefs.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/queuedworkflow.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_admin_server.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_async.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_classdecorators.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_cli.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_client.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_concurrency.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_config.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_croniter.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_dbos.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_debug.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_docker_secrets.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_failures.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_fastapi.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_fastapi_roles.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_flask.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_kafka.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_outcome.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_package.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_queue.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_scheduler.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_schema_migration.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_singleton.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_spans.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_sqlalchemy.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_workflow_introspection.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_workflow_management.py +0 -0
- {dbos-1.3.0a3 → dbos-1.3.0a4}/version/__init__.py +0 -0
@@ -1707,43 +1707,48 @@ class SystemDatabase:
|
|
1707
1707
|
if num_recent_queries >= queue.limiter["limit"]:
|
1708
1708
|
return []
|
1709
1709
|
|
1710
|
-
# Count how many workflows on this queue are currently PENDING both locally and globally.
|
1711
|
-
pending_tasks_query = (
|
1712
|
-
sa.select(
|
1713
|
-
SystemSchema.workflow_status.c.executor_id,
|
1714
|
-
sa.func.count().label("task_count"),
|
1715
|
-
)
|
1716
|
-
.select_from(SystemSchema.workflow_status)
|
1717
|
-
.where(SystemSchema.workflow_status.c.queue_name == queue.name)
|
1718
|
-
.where(
|
1719
|
-
SystemSchema.workflow_status.c.status
|
1720
|
-
== WorkflowStatusString.PENDING.value
|
1721
|
-
)
|
1722
|
-
.group_by(SystemSchema.workflow_status.c.executor_id)
|
1723
|
-
)
|
1724
|
-
pending_workflows = c.execute(pending_tasks_query).fetchall()
|
1725
|
-
pending_workflows_dict = {row[0]: row[1] for row in pending_workflows}
|
1726
|
-
local_pending_workflows = pending_workflows_dict.get(executor_id, 0)
|
1727
|
-
|
1728
1710
|
# Compute max_tasks, the number of workflows that can be dequeued given local and global concurrency limits,
|
1729
1711
|
max_tasks = float("inf")
|
1730
|
-
if queue.worker_concurrency is not None:
|
1731
|
-
#
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1712
|
+
if queue.worker_concurrency is not None or queue.concurrency is not None:
|
1713
|
+
# Count how many workflows on this queue are currently PENDING both locally and globally.
|
1714
|
+
pending_tasks_query = (
|
1715
|
+
sa.select(
|
1716
|
+
SystemSchema.workflow_status.c.executor_id,
|
1717
|
+
sa.func.count().label("task_count"),
|
1718
|
+
)
|
1719
|
+
.select_from(SystemSchema.workflow_status)
|
1720
|
+
.where(SystemSchema.workflow_status.c.queue_name == queue.name)
|
1721
|
+
.where(
|
1722
|
+
SystemSchema.workflow_status.c.status
|
1723
|
+
== WorkflowStatusString.PENDING.value
|
1724
|
+
)
|
1725
|
+
.group_by(SystemSchema.workflow_status.c.executor_id)
|
1726
|
+
)
|
1727
|
+
pending_workflows = c.execute(pending_tasks_query).fetchall()
|
1728
|
+
pending_workflows_dict = {row[0]: row[1] for row in pending_workflows}
|
1729
|
+
local_pending_workflows = pending_workflows_dict.get(executor_id, 0)
|
1730
|
+
|
1731
|
+
if queue.worker_concurrency is not None:
|
1732
|
+
# Print a warning if the local concurrency limit is violated
|
1733
|
+
if local_pending_workflows > queue.worker_concurrency:
|
1734
|
+
dbos_logger.warning(
|
1735
|
+
f"The number of local pending workflows ({local_pending_workflows}) on queue {queue.name} exceeds the local concurrency limit ({queue.worker_concurrency})"
|
1736
|
+
)
|
1737
|
+
max_tasks = max(
|
1738
|
+
0, queue.worker_concurrency - local_pending_workflows
|
1735
1739
|
)
|
1736
|
-
max_tasks = max(0, queue.worker_concurrency - local_pending_workflows)
|
1737
1740
|
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1741
|
+
if queue.concurrency is not None:
|
1742
|
+
global_pending_workflows = sum(pending_workflows_dict.values())
|
1743
|
+
# Print a warning if the global concurrency limit is violated
|
1744
|
+
if global_pending_workflows > queue.concurrency:
|
1745
|
+
dbos_logger.warning(
|
1746
|
+
f"The total number of pending workflows ({global_pending_workflows}) on queue {queue.name} exceeds the global concurrency limit ({queue.concurrency})"
|
1747
|
+
)
|
1748
|
+
available_tasks = max(
|
1749
|
+
0, queue.concurrency - global_pending_workflows
|
1744
1750
|
)
|
1745
|
-
|
1746
|
-
max_tasks = min(max_tasks, available_tasks)
|
1751
|
+
max_tasks = min(max_tasks, available_tasks)
|
1747
1752
|
|
1748
1753
|
# Retrieve the first max_tasks workflows in the queue.
|
1749
1754
|
# Only retrieve workflows of the local version (or without version set)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|