@iworkflow/dbos
v0.16.0
Published
DBOS adapter for @iworkflow/core
Readme
@iworkflow/dbos
DBOS для @iworkflow/core. Peer: @dbos-inc/dbos-sdk ^5.3; зависимость pg.
dbosRuntime({ systemDatabaseUrl }).start(def)— приложениеdef.app, очередьdef.app, версия<app>-patching.dbosClient()— старт, сигнал, query по id.Модули, зовущие друг друга, делят одну системную базу:
dbosRuntime({ systemDatabaseUrl })/dbosClient({ systemDatabaseUrl })илиDBOS_SYSTEM_DATABASE_URL; без адреса — отказ. Тесты модуля — в своей базе: одноимённые очереди перехватывают задачи.Своё в схеме
iwf:heartbeat(прогресс шага),birth(патчи кода, начавшего процесс).Запуск модулей — под advisory-замком: миграции DBOS на пустой базе иначе ловят deadlock.
Рантайм владеет DBOS процесса:
stopснимает все регистрации DBOS, повторныйstartрегистрирует заново.Прод — роль на модуль: схему ведёт владелец базы, модуль без DDL —
DBOS_ADMIN_URL=<владелец> bunx -p @iworkflow/dbos iworkflow-dbos migrate --prune --app italent=italentproduction ...(полный список модулей; без--pruneроли только добавляются; повторять после обновления пакета), у модуляdbosRuntime({ systemDatabaseUrl, migrate: false, connection: { password: () => token() } })— вход токеном, остальное из адреса (sslmode, sslrootcert). Триггеры: роль модуля пишет только свои процессы, чужому — завести в очередь, отменить, послать сообщение; дочерний — только от модуля родителя, так чтоparentId, вход и итог чужого процесса записью в базу не подделать. Роль вне списка — отказ. ВерсияDBOS_APPLICATION_VERSION— с префиксом<модуль>-.Системной базы нет —
startсоздаёт её (нужен доступ к базеpostgresи право CREATEDB), иначе заведи заранее.Все поды с executor id
local: новый под восстанавливает PENDING-процессы, пока старый ещё их ведёт. В k8s — один под иstrategy: Recreate, пока нет своего executor id на под.
Переменные: DBOS_SYSTEM_DATABASE_URL, DBOS_QUEUE_POLL_MS, DBOS_RESULT_POLL_MS, DBOS_APPLICATION_VERSION.
