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.
Files changed (107) hide show
  1. {dbos-1.3.0a3 → dbos-1.3.0a4}/PKG-INFO +1 -1
  2. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_sys_db.py +37 -32
  3. {dbos-1.3.0a3 → dbos-1.3.0a4}/pyproject.toml +1 -1
  4. {dbos-1.3.0a3 → dbos-1.3.0a4}/LICENSE +0 -0
  5. {dbos-1.3.0a3 → dbos-1.3.0a4}/README.md +0 -0
  6. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/__init__.py +0 -0
  7. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/__main__.py +0 -0
  8. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_admin_server.py +0 -0
  9. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_app_db.py +0 -0
  10. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_classproperty.py +0 -0
  11. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_client.py +0 -0
  12. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_conductor/conductor.py +0 -0
  13. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_conductor/protocol.py +0 -0
  14. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_context.py +0 -0
  15. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_core.py +0 -0
  16. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_croniter.py +0 -0
  17. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_dbos.py +0 -0
  18. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_dbos_config.py +0 -0
  19. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_debug.py +0 -0
  20. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_docker_pg_helper.py +0 -0
  21. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_error.py +0 -0
  22. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_event_loop.py +0 -0
  23. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_fastapi.py +0 -0
  24. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_flask.py +0 -0
  25. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_kafka.py +0 -0
  26. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_kafka_message.py +0 -0
  27. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_logger.py +0 -0
  28. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/env.py +0 -0
  29. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/script.py.mako +0 -0
  30. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
  31. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
  32. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
  33. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
  34. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py +0 -0
  35. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
  36. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
  37. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
  38. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
  39. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
  40. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
  41. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
  42. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_outcome.py +0 -0
  43. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_queue.py +0 -0
  44. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_recovery.py +0 -0
  45. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_registrations.py +0 -0
  46. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_roles.py +0 -0
  47. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_scheduler.py +0 -0
  48. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/__init__.py +0 -0
  49. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/application_database.py +0 -0
  50. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_schemas/system_database.py +0 -0
  51. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_serialization.py +0 -0
  52. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/README.md +0 -0
  53. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
  54. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
  55. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
  56. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
  57. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
  58. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
  59. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
  60. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
  61. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
  62. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_tracer.py +0 -0
  63. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_utils.py +0 -0
  64. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/_workflow_commands.py +0 -0
  65. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/_github_init.py +0 -0
  66. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/_template_init.py +0 -0
  67. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/cli/cli.py +0 -0
  68. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/dbos-config.schema.json +0 -0
  69. {dbos-1.3.0a3 → dbos-1.3.0a4}/dbos/py.typed +0 -0
  70. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/__init__.py +0 -0
  71. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/atexit_no_ctor.py +0 -0
  72. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/atexit_no_launch.py +0 -0
  73. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/classdefs.py +0 -0
  74. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/client_collateral.py +0 -0
  75. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/client_worker.py +0 -0
  76. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/conftest.py +0 -0
  77. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/dupname_classdefs1.py +0 -0
  78. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/dupname_classdefsa.py +0 -0
  79. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/more_classdefs.py +0 -0
  80. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/queuedworkflow.py +0 -0
  81. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_admin_server.py +0 -0
  82. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_async.py +0 -0
  83. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_classdecorators.py +0 -0
  84. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_cli.py +0 -0
  85. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_client.py +0 -0
  86. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_concurrency.py +0 -0
  87. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_config.py +0 -0
  88. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_croniter.py +0 -0
  89. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_dbos.py +0 -0
  90. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_debug.py +0 -0
  91. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_docker_secrets.py +0 -0
  92. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_failures.py +0 -0
  93. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_fastapi.py +0 -0
  94. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_fastapi_roles.py +0 -0
  95. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_flask.py +0 -0
  96. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_kafka.py +0 -0
  97. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_outcome.py +0 -0
  98. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_package.py +0 -0
  99. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_queue.py +0 -0
  100. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_scheduler.py +0 -0
  101. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_schema_migration.py +0 -0
  102. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_singleton.py +0 -0
  103. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_spans.py +0 -0
  104. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_sqlalchemy.py +0 -0
  105. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_workflow_introspection.py +0 -0
  106. {dbos-1.3.0a3 → dbos-1.3.0a4}/tests/test_workflow_management.py +0 -0
  107. {dbos-1.3.0a3 → dbos-1.3.0a4}/version/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbos
3
- Version: 1.3.0a3
3
+ Version: 1.3.0a4
4
4
  Summary: Ultra-lightweight durable execution in Python
5
5
  Author-Email: "DBOS, Inc." <contact@dbos.dev>
6
6
  License: MIT
@@ -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
- # Print a warning if the local concurrency limit is violated
1732
- if local_pending_workflows > queue.worker_concurrency:
1733
- dbos_logger.warning(
1734
- f"The number of local pending workflows ({local_pending_workflows}) on queue {queue.name} exceeds the local concurrency limit ({queue.worker_concurrency})"
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
- if queue.concurrency is not None:
1739
- global_pending_workflows = sum(pending_workflows_dict.values())
1740
- # Print a warning if the global concurrency limit is violated
1741
- if global_pending_workflows > queue.concurrency:
1742
- dbos_logger.warning(
1743
- f"The total number of pending workflows ({global_pending_workflows}) on queue {queue.name} exceeds the global concurrency limit ({queue.concurrency})"
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
- available_tasks = max(0, queue.concurrency - global_pending_workflows)
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)
@@ -27,7 +27,7 @@ dependencies = [
27
27
  ]
28
28
  requires-python = ">=3.9"
29
29
  readme = "README.md"
30
- version = "1.3.0a3"
30
+ version = "1.3.0a4"
31
31
 
32
32
  [project.license]
33
33
  text = "MIT"
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