Skip to content

Configuration Reference

This page lists every supported configuration option, grouped by build-time and runtime usage.

Build-Time Configuration

These settings are read during build/compile and affect generated code or CLI wiring.

Pipeline YAML

The pipeline YAML controls global settings used by the annotation processor.

PropertyTypeDefaultDescription
transportenumGRPCGlobal transport for generated adapters (GRPC, REST, or LOCAL).
platformenumCOMPUTETarget deployment platform (COMPUTE or FUNCTION; legacy aliases: STANDARD, LAMBDA).

If pipeline-config.yaml (the template configuration produced by Canvas or the template generator) is present, the build can also use it to generate protobuf definitions and orchestrator endpoints at compile time.

Orchestrator CLI (Annotation)

CLI metadata is configured on the orchestrator annotation.

Annotation AttributeTypeDefaultDescription
generateClibooleantrueEnables generation of the orchestrator CLI entrypoint.
namestring"orchestrator"CLI command name.
descriptionstring"Pipeline Orchestrator CLI"CLI command description.
versionstring"1.0.0"CLI command version.

Example:

java
@PipelineOrchestrator(
    generateCli = true,
    name = "payments-orchestrator",
    description = "CSV Payments Orchestrator CLI",
    version = "1.2.0"
)
public class OrchestratorMarker {
}

CLI input expectations:

  • --input / PIPELINE_INPUT must be a JSON object matching the input DTO.
  • --input-list / PIPELINE_INPUT_LIST must be a JSON array of input DTO objects.

Examples:

bash
./app -i '{"path":"/data/in"}'
bash
./app --input-list '[{"path":"/data/a"},{"path":"/data/b"}]'

Annotation Processor Options

Pass via maven-compiler-plugin with -A arguments.

OptionTypeDefaultDescription
-Apipeline.generatedSourcesDirpathnoneBase directory for role-specific generated sources.
-Apipeline.generatedSourcesRootpathnoneLegacy alias of pipeline.generatedSourcesDir.
-Apipeline.orchestrator.generatebooleanfalseGenerate orchestrator endpoint even without @PipelineOrchestrator. CLI generation still requires the annotation.
-Apipeline.transportenumfrom YAML (GRPC)Build-time transport override.
-Apipeline.platformenumfrom YAML (COMPUTE)Build-time platform override (COMPUTE or FUNCTION; legacy aliases: STANDARD, LAMBDA).
-Apipeline.rest.naming.strategyenumRESOURCEFULREST endpoint naming strategy (RESOURCEFUL or LEGACY).

Equivalent process-level overrides are also supported through:

  • system properties: pipeline.transport, pipeline.platform, pipeline.rest.naming.strategy
  • environment variables: PIPELINE_TRANSPORT, PIPELINE_PLATFORM, PIPELINE_REST_NAMING_STRATEGY

REST Path Overrides (Build-Time)

The annotation processor reads src/main/resources/application.properties during compilation to override REST paths:

PropertyTypeDefaultDescription
pipeline.rest.path.<ServiceName>stringnoneOverrides REST path by service name.
pipeline.rest.path.<fully.qualified.ServiceClass>stringnoneOverrides REST path by service class name.

When pipeline.rest.naming.strategy=RESOURCEFUL (default), generated REST paths are:

  • 1-1 (UNARY_UNARY) and N-1 (STREAMING_UNARY): /api/v1/<output-type>
  • 1-N (UNARY_STREAMING) and M-N (STREAMING_STREAMING): /api/v1/<input-type>
  • side effects append plugin token when available (for example /api/v1/ack-payment-sent/persistence)

When pipeline.rest.naming.strategy=LEGACY, generated REST paths stay in the older form:

  • /api/v1/process-<service>/process

Runtime Configuration

Prefix: pipeline

Orchestrator Client Wiring (Generated)

The annotation processor generates default client wiring for orchestrators at build time. Generated values have lower priority than explicit application.properties settings or environment variables.

To override routing or ports, set the following in application.properties:

PropertyTypeDefaultDescription
pipeline.module.<module>.hoststringnoneHost for a module (applies to all its services).
pipeline.module.<module>.portintnonePort for a module (applies to all its services).
pipeline.module.<module>.stepslistnoneComma/space-separated client names to assign.
pipeline.module.<module>.aspectslistnoneAspect names to assign (e.g. persistence).
pipeline.client.base-portint8443Base port used when assigning per-module offsets.
pipeline.client.tls-configuration-namestringnoneTLS registry name for generated clients.

Client names follow the same conventions as generated adapters:

  • regular steps: process-<service> (for example ProcessPaymentServiceprocess-payment)
  • synthetic steps: observe-<aspect>-<type>-side-effect (for example persistence + PaymentRecord)

About modules:

  • A module is a deployment/runtime group for one or more services (for example, payments-processing-svc hosting multiple steps).
  • Use module overrides when multiple services share the same runtime or when legacy layouts bundle steps together (like csv-payments).
  • Avoid module overrides if you want the default 1‑step‑per‑module layout; in that case, only override individual clients as needed.

Avoiding drift:

  • Keep server ports and orchestrator client ports aligned by sourcing them from the same pipeline.module.<module>.port or shared environment variables.
  • If you override a client endpoint directly, verify the corresponding server listens on the same host/port (especially when TLS is enabled).

If you need to override a single client endpoint, set the Quarkus property directly:

properties
quarkus.grpc.clients.<client>.host=host
quarkus.grpc.clients.<client>.port=8444
quarkus.grpc.clients.<client>.tls-configuration-name=pipeline-client
quarkus.rest-client.<client>.url=https://host:8444
quarkus.rest-client.<client>.tls-configuration-name=pipeline-client

REST Client Endpoints

REST client steps use Quarkus REST client configuration:

PropertyTypeDefaultDescription
quarkus.rest-client.<client-name>.urlstringnoneBase URL for a REST client step.

client-name is derived from the service class name in kebab-case with a trailing Service removed (for example ProcessPaymentServiceprocess-payment).

Cache Configuration

Prefix: pipeline.cache

PropertyTypeDefaultDescription
pipeline.cache.providerstringnoneCache provider name (for example redis, caffeine, memory).
pipeline.cache.provider.classstringnoneFully-qualified cache provider class name to lock selection at runtime.
pipeline.cache.policystringcache-onlyDefault cache policy (prefer-cache/return-cached, cache-only, skip-if-present, require-cache, bypass-cache).
pipeline.cache.ttldurationnoneDefault cache TTL.
pipeline.cache.caffeine.namestringpipeline-cacheCache name for the Caffeine provider.
pipeline.cache.caffeine.maximum-sizelong10000Maximum cache size for the Caffeine provider.
pipeline.cache.caffeine.expire-after-writedurationnoneExpire entries after write for the Caffeine provider.
pipeline.cache.caffeine.expire-after-accessdurationnoneExpire entries after access for the Caffeine provider.
pipeline.cache.redis.prefixstringpipeline-cache:Key prefix for Redis cache entries.

Persistence Configuration

Prefix: pipeline.persistence

PropertyTypeDefaultDescription
pipeline.persistence.duplicate-keystringfailDuplicate key policy for persistence (fail, ignore, upsert).
persistence.provider.classstringnoneFully-qualified persistence provider class name to lock selection at runtime.

Pipeline Execution

Prefix: pipeline

PropertyTypeDefaultDescription
pipeline.parallelismstringAUTOParallelism policy: SEQUENTIAL, AUTO, or PARALLEL.
pipeline.max-concurrencyinteger128Per-step maximum in-flight items when parallel execution is enabled.

Orchestrator Queue-Async

Prefix: pipeline.orchestrator

PropertyTypeDefaultDescription
pipeline.orchestrator.modeenumSYNCOrchestrator mode (SYNC, QUEUE_ASYNC).
pipeline.orchestrator.default-tenantstringdefaultFallback tenant when caller omits tenant id.
pipeline.orchestrator.execution-ttl-daysint7Execution state retention in days.
pipeline.orchestrator.lease-mslong30000Lease duration for claimed executions.
pipeline.orchestrator.max-retriesint3Max execution-level retries before terminal failure.
pipeline.orchestrator.retry-delaydurationPT10SBase retry delay.
pipeline.orchestrator.retry-multiplierdouble2.0Retry backoff multiplier.
pipeline.orchestrator.sweep-intervaldurationPT30SInterval for due-execution sweep/re-dispatch.
pipeline.orchestrator.sweep-limitint100Max due executions swept per pass.
pipeline.orchestrator.idempotency-policyenumOPTIONAL_CLIENT_KEYOPTIONAL_CLIENT_KEY, CLIENT_KEY_REQUIRED, SERVER_KEY_ONLY.
pipeline.orchestrator.state-providerstringmemoryExecutionStateStore provider selector.
pipeline.orchestrator.dispatcher-providerstringeventWorkDispatcher provider selector.
pipeline.orchestrator.dlq-providerstringlogDeadLetterPublisher provider selector.
pipeline.orchestrator.dlq-urlstringnoneDurable DLQ queue URL when dlq-provider=sqs.
pipeline.orchestrator.queue-urlstringnoneQueue URL for external dispatcher providers.
pipeline.orchestrator.dynamo.execution-tablestringtpf_executionDynamoDB table used for execution state rows.
pipeline.orchestrator.dynamo.execution-key-tablestringtpf_execution_keyDynamoDB table used for submit dedupe keys.
pipeline.orchestrator.dynamo.regionstringnoneOptional DynamoDB region override.
pipeline.orchestrator.dynamo.endpoint-overridestringnoneOptional DynamoDB endpoint override (local/dev).
pipeline.orchestrator.sqs.regionstringnoneOptional SQS region override.
pipeline.orchestrator.sqs.endpoint-overridestringnoneOptional SQS endpoint override (local/dev).
pipeline.orchestrator.sqs.local-loopbackbooleantrueAlso fire in-process work event after SQS enqueue (dev convenience).
pipeline.orchestrator.strict-startupbooleantrueFail startup if queue mode prerequisites are invalid.

Queue mode notes:

  1. QUEUE_ASYNC rejects async streaming output for this milestone.
  2. Keep strict-startup=true in production, so invalid provider wiring fails fast.
  3. In queue mode, strict startup also requires pipeline.orchestrator.idempotency-policy to be explicitly set to a non-default value.
  4. In-memory providers are for local/dev only; use durable providers for HA.
  5. For durable dead-letter handling, set both pipeline.orchestrator.dlq-provider=sqs and pipeline.orchestrator.dlq-url.

Example durable provider wiring:

properties
pipeline.orchestrator.mode=QUEUE_ASYNC
pipeline.orchestrator.state-provider=dynamo
pipeline.orchestrator.dispatcher-provider=sqs
pipeline.orchestrator.dlq-provider=sqs
pipeline.orchestrator.queue-url=https://sqs.eu-west-1.amazonaws.com/123456789012/tpf-work
pipeline.orchestrator.dlq-url=https://sqs.eu-west-1.amazonaws.com/123456789012/tpf-dlq
pipeline.orchestrator.idempotency-policy=CLIENT_KEY_REQUIRED

Item Reject Sink

Prefix: pipeline.item-reject

PropertyTypeDefaultDescription
pipeline.item-reject.providerstringlogStep-level reject sink provider selector (log, memory, sqs).
pipeline.item-reject.strict-startupbooleantrueFail startup when selected sink provider wiring is invalid.
pipeline.item-reject.include-payloadbooleanfalseInclude rejected payload in sink envelope.
pipeline.item-reject.memory-capacityint512Bounded ring size for the memory provider.
pipeline.item-reject.publish-failure-policyenumCONTINUESink publish failure behavior (CONTINUE, FAIL_PIPELINE).
pipeline.item-reject.sqs.queue-urlstringnoneSQS queue URL when provider=sqs.
pipeline.item-reject.sqs.regionstringnoneOptional SQS region override.
pipeline.item-reject.sqs.endpoint-overridestringnoneOptional SQS endpoint override (local/dev).

Operational notes:

  1. Item reject sink is step-level recover-and-continue behaviour (recoverOnFailure=true).
  2. In production launch mode, startup fails when recovery is enabled and a non-durable sink (log/memory) is selected.
  3. In non-production modes, non-durable sinks are allowed with warning logs.
  4. Keep include-payload=false unless payload capture is explicitly required for triage.

Example durable step-level reject sink:

properties
pipeline.item-reject.provider=sqs
pipeline.item-reject.sqs.queue-url=https://sqs.eu-west-1.amazonaws.com/123456789012/tpf-item-reject
pipeline.item-reject.include-payload=false
pipeline.item-reject.publish-failure-policy=CONTINUE

Telemetry

Prefix: pipeline.telemetry

PropertyTypeDefaultDescription
pipeline.telemetry.item-input-typestringnoneFully-qualified input type used to define the item boundary (build-time only — requires rebuild to take effect).
pipeline.telemetry.item-output-typestringnoneFully-qualified output type used to define the item boundary (build-time only — requires rebuild to take effect).
pipeline.telemetry.slo.rpc-latency-msnumber1000RPC latency threshold (ms) used to emit SLO counters.
pipeline.telemetry.slo.item-throughput-per-minnumber1000Item throughput threshold (items/min) used to emit SLO counters.

Item boundary types are compiled into telemetry metadata; runtime changes do not apply unless you rebuild the project.

In-flight Probe (Kill Switch)

Prefix: pipeline.kill-switch

PropertyTypeDefaultDescription
pipeline.kill-switch.retry-amplification.enabledbooleanfalseEnable retry amplification guard.
pipeline.kill-switch.retry-amplification.windowdurationPT30SEvaluation window for sustained inflight growth.
pipeline.kill-switch.retry-amplification.inflight-slope-thresholddouble10Inflight slope threshold (items/sec).
pipeline.kill-switch.retry-amplification.modestringfail-fastGuard behavior (fail-fast or log-only).
pipeline.kill-switch.retry-amplification.sustain-samplesinteger3Consecutive samples above the threshold required to trigger.

Global Defaults

Prefix: pipeline.defaults

PropertyTypeDefaultDescription
pipeline.defaults.retry-limitinteger3Max retry attempts for steps.
pipeline.defaults.retry-wait-mslong2000Base delay between retries (ms).
pipeline.defaults.recover-on-failurebooleanfalseEnables recovery behavior on failure.
pipeline.defaults.max-backofflong30000Maximum backoff delay (ms).
pipeline.defaults.jitterbooleanfalseAdds jitter to retry delays.
pipeline.defaults.backpressure-buffer-capacityinteger128Per-step backpressure buffer capacity (in items).
pipeline.defaults.backpressure-strategystringBUFFERBackpressure strategy (BUFFER or DROP).

These defaults apply to every step unless a step-level override is present.

Function Transport Context Attributes (Function Handlers/Adapters)

These values are carried in FunctionTransportContext attributes by function handlers/adapters in Lambda deployments. They are not application.properties keys.

Attribute KeyTypeDefaultDescription
tpf.idempotency.policyenumCONTEXT_STABLEFunction transport idempotency policy (CONTEXT_STABLE or EXPLICIT; legacy RANDOM alias accepted).
tpf.idempotency.keystringnoneExplicit caller-provided idempotency key used when policy is EXPLICIT.

Important:

  • The Pipeline Framework (TPF) transport idempotency is a boundary-level aid.
  • Authoritative duplicate prevention must still be enforced in business/data layers (domain constraints, DB primary/unique keys, warehouse controls).

Build-Time Validation (Annotation Processor)

These are build-time options passed to the annotation processor (not runtime config).

OptionTypeDefaultDescription
pipeline.provider.class.<name>stringnoneProvider class name to validate ordering/thread-safety hints (e.g. pipeline.provider.class.cache=...).

Per-Step Overrides

Prefix: pipeline.step."fully.qualified.StepClass"

All properties listed under pipeline.defaults.* can be overridden per step:

properties
pipeline.step."com.example.MyStep".retry-limit=7
pipeline.step."com.example.MyStep".recover-on-failure=true
pipeline.step."com.example.MyStep".backpressure-buffer-capacity=4096
pipeline.step."com.example.MyStep".backpressure-strategy=BUFFER

Startup Health Checks

PropertyTypeDefaultDescription
pipeline.health.startup-timeoutdurationPT5MMax time to wait for startup dependency health checks.