Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,34 @@ $workflow->output();
=> 'Hello, world!'
```

## Using a dedicated storage connection

By default all workflow persistence (every Eloquent model and every migration shipped
by this package) lives on your application's **default** database connection. To isolate
workflow state on its own database — for separate backup/retention/scaling, a different
driver, or tenant isolation — point the package at a dedicated connection:

```php
// config/workflows.php
'storage' => [
// null => the application's default connection (the default, unchanged behavior).
'connection' => Env::dw('DW_STORAGE_CONNECTION', 'WORKFLOW_STORAGE_CONNECTION', null),
],
```

```dotenv
# .env — must match a key under config('database.connections')
DW_STORAGE_CONNECTION=durable_workflow
```

When set, both the models and the migrations are routed to that connection, so
`php artisan migrate` creates the workflow tables there and all reads/writes target it.
Leaving it `null` preserves today's behavior exactly.

The schema/database is governed by the connection's own configuration — use
`search_path` for PostgreSQL or `database` for MySQL on that connection. There is no
separate schema option.

## Sponsors

The Durable Workflow package is sustained by the community via sponsors and volunteers.
Expand Down
3 changes: 3 additions & 0 deletions src/Models/StoredWorkflow.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@
use Workflow\States\HasStates;
use Workflow\States\WorkflowContinuedStatus;
use Workflow\States\WorkflowStatus;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\WorkflowMetadata;
use Workflow\WorkflowOptions;
use Workflow\WorkflowStub;

class StoredWorkflow extends Model
{
use ResolvesStorageConnection;

use HasStates;
use Prunable;

Expand Down
3 changes: 3 additions & 0 deletions src/Models/StoredWorkflowException.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Workflow\Models;

use Illuminate\Database\Eloquent\Model;
use Workflow\Traits\ResolvesStorageConnection;

class StoredWorkflowException extends Model
{
use ResolvesStorageConnection;

public const UPDATED_AT = null;

/**
Expand Down
3 changes: 3 additions & 0 deletions src/Models/StoredWorkflowLog.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Workflow\Models;

use Illuminate\Database\Eloquent\Model;
use Workflow\Traits\ResolvesStorageConnection;

class StoredWorkflowLog extends Model
{
use ResolvesStorageConnection;

public const UPDATED_AT = null;

/**
Expand Down
3 changes: 3 additions & 0 deletions src/Models/StoredWorkflowSignal.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Workflow\Models;

use Illuminate\Database\Eloquent\Model;
use Workflow\Traits\ResolvesStorageConnection;

class StoredWorkflowSignal extends Model
{
use ResolvesStorageConnection;

public const UPDATED_AT = null;

/**
Expand Down
3 changes: 3 additions & 0 deletions src/Models/StoredWorkflowTimer.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Workflow\Models;

use Illuminate\Database\Eloquent\Model;
use Workflow\Traits\ResolvesStorageConnection;

class StoredWorkflowTimer extends Model
{
use ResolvesStorageConnection;

public const UPDATED_AT = null;

/**
Expand Down
15 changes: 15 additions & 0 deletions src/Support/WorkflowMigration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types=1);

namespace Workflow\Support;

use Illuminate\Database\Migrations\Migration;

abstract class WorkflowMigration extends Migration
{
public function getConnection(): ?string
{
return config('workflows.storage.connection') ?? $this->connection;
}
}
13 changes: 13 additions & 0 deletions src/Traits/ResolvesStorageConnection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

declare(strict_types=1);

namespace Workflow\Traits;

trait ResolvesStorageConnection
{
public function getConnectionName(): ?string
{
return config('workflows.storage.connection') ?? $this->connection;
}
}
3 changes: 3 additions & 0 deletions src/V2/Models/ActivityAttempt.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\ActivityAttemptStatus;
use Workflow\V2\Support\ConfiguredV2Models;

class ActivityAttempt extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/ActivityExecution.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Workflow\Serializers\Serializer;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\ActivityStatus;
use Workflow\V2\Support\ConfiguredV2Models;
use Workflow\V2\Support\ExternalPayloads;

class ActivityExecution extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkerCompatibilityHeartbeat.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Workflow\V2\Models;

use Illuminate\Database\Eloquent\Model;
use Workflow\Traits\ResolvesStorageConnection;

class WorkerCompatibilityHeartbeat extends Model
{
use ResolvesStorageConnection;

protected $table = 'workflow_worker_compatibility_heartbeats';

protected $guarded = [];
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowChildCall.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\ChildCallStatus;
use Workflow\V2\Enums\ParentClosePolicy;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowChildCall extends Model
{
use ResolvesStorageConnection;

public $incrementing = true;

protected $table = 'workflow_child_calls';
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Workflow\Serializers\Serializer;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\CommandOutcome;
use Workflow\V2\Enums\CommandStatus;
use Workflow\V2\Enums\CommandType;
Expand All @@ -20,6 +21,8 @@

class WorkflowCommand extends Model
{
use ResolvesStorageConnection;

use HasUlids;

private const MESSAGE_COMMAND_TYPES = ['signal', 'update'];
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowFailure.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\FailureCategory;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowFailure extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowHistoryEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\HistoryEventType;
use Workflow\V2\Support\ConfiguredV2Models;
use Workflow\V2\Support\ExternalPayloads;
use Workflow\V2\Support\HistoryEventPayloadContract;

class WorkflowHistoryEvent extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowInstance.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowInstance extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowLink.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowLink extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowMemo.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use InvalidArgumentException;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowMemo extends Model
{
use ResolvesStorageConnection;

// Size and count limits (Phase 1 structural limits)
public const MAX_MEMOS_PER_RUN = 100;

Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\MessageConsumeState;
use Workflow\V2\Enums\MessageDirection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowMessage extends Model
{
use ResolvesStorageConnection;

// Structural limits
public const MAX_MESSAGES_PER_STREAM = 10000;

Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowRun.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@
use Illuminate\Database\Eloquent\Relations\HasOne;
use Workflow\Serializers\CodecRegistry;
use Workflow\Serializers\Serializer;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\RunStatus;
use Workflow\V2\Support\ConfiguredV2Models;
use Workflow\V2\Support\ExternalPayloads;

class WorkflowRun extends Model
{
use ResolvesStorageConnection;

use HasUlids;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowRunLineageEntry.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowRunLineageEntry extends Model
{
use ResolvesStorageConnection;

public $incrementing = false;

protected $table = 'workflow_run_lineage_entries';
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowRunSummary.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Enums\RunStatus;
use Workflow\V2\Support\ConfiguredV2Models;
use Workflow\V2\Support\RepairBlockedReason;
use Workflow\V2\Support\WorkflowTaskProblem;

class WorkflowRunSummary extends Model
{
use ResolvesStorageConnection;

public $incrementing = false;

protected $table = 'workflow_run_summaries';
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowRunTimerEntry.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Carbon;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowRunTimerEntry extends Model
{
use ResolvesStorageConnection;

public const CURRENT_SCHEMA_VERSION = 1;

public $incrementing = false;
Expand Down
3 changes: 3 additions & 0 deletions src/V2/Models/WorkflowRunWait.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Carbon;
use Workflow\Traits\ResolvesStorageConnection;
use Workflow\V2\Support\ConfiguredV2Models;

class WorkflowRunWait extends Model
{
use ResolvesStorageConnection;

public $incrementing = false;

protected $table = 'workflow_run_waits';
Expand Down
Loading
Loading