dbos 1.2.0a5__tar.gz → 1.2.0a6__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.2.0a5 → dbos-1.2.0a6}/PKG-INFO +1 -1
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_sys_db.py +10 -7
- {dbos-1.2.0a5 → dbos-1.2.0a6}/pyproject.toml +1 -1
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_queue.py +30 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/LICENSE +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/README.md +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/__init__.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/__main__.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_admin_server.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_app_db.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_classproperty.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_client.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_conductor/conductor.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_conductor/protocol.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_context.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_core.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_croniter.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_dbos.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_dbos_config.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_debug.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_docker_pg_helper.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_error.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_event_loop.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_fastapi.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_flask.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_kafka.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_kafka_message.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_logger.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/env.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/script.py.mako +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_outcome.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_queue.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_recovery.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_registrations.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_roles.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_scheduler.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_schemas/__init__.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_schemas/application_database.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_schemas/system_database.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_serialization.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_tracer.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_utils.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/_workflow_commands.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/cli/_github_init.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/cli/_template_init.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/cli/cli.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/dbos-config.schema.json +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/dbos/py.typed +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/__init__.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/atexit_no_ctor.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/atexit_no_launch.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/classdefs.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/client_collateral.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/client_worker.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/conftest.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/dupname_classdefs1.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/dupname_classdefsa.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/more_classdefs.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/queuedworkflow.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_admin_server.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_async.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_classdecorators.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_cli.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_client.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_concurrency.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_config.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_croniter.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_dbos.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_debug.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_docker_secrets.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_failures.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_fastapi.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_fastapi_roles.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_flask.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_kafka.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_outcome.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_package.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_scheduler.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_schema_migration.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_singleton.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_spans.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_sqlalchemy.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_workflow_introspection.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/tests/test_workflow_management.py +0 -0
- {dbos-1.2.0a5 → dbos-1.2.0a6}/version/__init__.py +0 -0
@@ -425,6 +425,15 @@ class SystemDatabase:
|
|
425
425
|
wf_status: WorkflowStatuses = status["status"]
|
426
426
|
workflow_deadline_epoch_ms: Optional[int] = status["workflow_deadline_epoch_ms"]
|
427
427
|
|
428
|
+
# Values to update when a row already exists for this workflow
|
429
|
+
update_values: dict[str, Any] = {
|
430
|
+
"recovery_attempts": SystemSchema.workflow_status.c.recovery_attempts + 1,
|
431
|
+
"updated_at": func.extract("epoch", func.now()) * 1000,
|
432
|
+
}
|
433
|
+
# Don't update an existing executor ID when enqueueing a workflow.
|
434
|
+
if wf_status != WorkflowStatusString.ENQUEUED.value:
|
435
|
+
update_values["executor_id"] = status["executor_id"]
|
436
|
+
|
428
437
|
cmd = (
|
429
438
|
pg.insert(SystemSchema.workflow_status)
|
430
439
|
.values(
|
@@ -450,13 +459,7 @@ class SystemDatabase:
|
|
450
459
|
)
|
451
460
|
.on_conflict_do_update(
|
452
461
|
index_elements=["workflow_uuid"],
|
453
|
-
set_=
|
454
|
-
executor_id=status["executor_id"],
|
455
|
-
recovery_attempts=(
|
456
|
-
SystemSchema.workflow_status.c.recovery_attempts + 1
|
457
|
-
),
|
458
|
-
updated_at=func.extract("epoch", func.now()) * 1000,
|
459
|
-
),
|
462
|
+
set_=update_values,
|
460
463
|
)
|
461
464
|
)
|
462
465
|
|
@@ -1446,3 +1446,33 @@ def test_unsetting_timeout(dbos: DBOS) -> None:
|
|
1446
1446
|
# Verify child two, which doesn't have a timeout, succeeds
|
1447
1447
|
handle = DBOS.retrieve_workflow(child_two)
|
1448
1448
|
assert handle.get_result() == child_two
|
1449
|
+
|
1450
|
+
|
1451
|
+
def test_queue_executor_id(dbos: DBOS) -> None:
|
1452
|
+
|
1453
|
+
queue = Queue("test-queue")
|
1454
|
+
|
1455
|
+
@DBOS.workflow()
|
1456
|
+
def example_workflow() -> str:
|
1457
|
+
return DBOS.workflow_id
|
1458
|
+
|
1459
|
+
# Set an executor ID
|
1460
|
+
original_executor_id = str(uuid.uuid4())
|
1461
|
+
GlobalParams.executor_id = original_executor_id
|
1462
|
+
|
1463
|
+
# Enqueue the workflow, validate its executor ID
|
1464
|
+
wfid = str(uuid.uuid4())
|
1465
|
+
with SetWorkflowID(wfid):
|
1466
|
+
handle = queue.enqueue(example_workflow)
|
1467
|
+
assert handle.get_result() == wfid
|
1468
|
+
assert handle.get_status().executor_id == original_executor_id
|
1469
|
+
|
1470
|
+
# Set a new executor ID
|
1471
|
+
new_executor_id = str(uuid.uuid4())
|
1472
|
+
GlobalParams.executor_id = new_executor_id
|
1473
|
+
|
1474
|
+
# Re-enqueue the workflow, verify its executor ID does not change.
|
1475
|
+
with SetWorkflowID(wfid):
|
1476
|
+
handle = queue.enqueue(example_workflow)
|
1477
|
+
assert handle.get_result() == wfid
|
1478
|
+
assert handle.get_status().executor_id == original_executor_id
|
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.2.0a5 → dbos-1.2.0a6}/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
|