Skip to content

Configuration (Overview)

This page maps the most-used configuration entry points and where to manage them for TPF applications.

Primary References

Lambda-Focused Configuration

For AWS Lambda-targeted applications:

  • Build-time platform override:
    • system property: pipeline.platform=FUNCTION
    • environment variable: PIPELINE_PLATFORM=FUNCTION
    • legacy aliases currently accepted for compatibility: LAMBDA and STANDARD
  • Build-time transport override:
    • system property: pipeline.transport=REST
    • environment variable: PIPELINE_TRANSPORT=REST
  • REST naming strategy:
    • system property: pipeline.rest.naming.strategy=RESOURCEFUL|LEGACY
    • environment variable: PIPELINE_REST_NAMING_STRATEGY=RESOURCEFUL|LEGACY

Operational keys commonly used with Lambda:

  • quarkus.snapstart.enabled
  • JAVA_TOOL_OPTIONS=-XX:+TieredCompilation -XX:TieredStopAtLevel=1

Function transport idempotency context attributes:

  • tpf.idempotency.policy=CONTEXT_STABLE|EXPLICIT (legacy RANDOM is accepted as alias)
  • tpf.idempotency.key=<stable-caller-key>
  • tpf.function.invocation.mode=LOCAL|REMOTE (default LOCAL)
  • tpf.function.target.runtime=<runtime-name> (optional target metadata)
  • tpf.function.target.module=<module-name> (optional target metadata)
  • tpf.function.target.handler=<handler-name> (optional target metadata)
  • tpf.function.target.url=<https://target-endpoint> (optional direct remote target metadata)

Examples of tpf.idempotency.key values:

  • order ID (order-12345)
  • transaction ID (txn-8f2c1)
  • caller-provided idempotency token from an ingress API

Policy guidance:

  • CONTEXT_STABLE (default): framework-generated deterministic transport keys from stable context/envelope identifiers.
  • EXPLICIT: use when you can provide a stable business-side key that should remain constant across retries. tpf.idempotency.key is expected in this mode; if missing, adapters log a warning and fall back to CONTEXT_STABLE.
  • RANDOM: legacy compatibility alias mapped to CONTEXT_STABLE.

Notes:

  • Supplying tpf.idempotency.key while policy is CONTEXT_STABLE/RANDOM is ignored by key derivation.
  • tpf.function.invocation.mode=LOCAL is the default for in-process execution.
  • Generated FUNCTION handlers wire both local and remote invoke adapters by default.
  • tpf.function.invocation.mode=REMOTE activates remote invoke adapter routing only when both target metadata (tpf.function.target.*) and a configured remote invoke adapter path are present.
  • tpf.function.target.runtime, tpf.function.target.module, and tpf.function.target.handler are target routing hints for REMOTE mode. Typical values are your own runtime/module/handler identifiers, for example: pipeline, index-document-svc, ProcessIndexDocumentFunctionHandler.
  • To satisfy the "remote invoke adapter path" prerequisite, provide target resolution metadata that a remote adapter can resolve:
    • set tpf.function.target.url (context attribute) directly, or
    • set tpf.function.target.handler / tpf.function.target.module and configure matching runtime URL settings (for example, quarkus.rest-client.<client>.url or pipeline.module.<module>.host + pipeline.module.<module>.port for HttpRemoteFunctionInvokeAdapter).

These are transport-context attributes (ephemeral per invocation metadata propagated via FunctionTransportContext), not global runtime properties in application.properties. They are usually set by handler/adapter code when creating FunctionTransportContext, for example:

java
// LOCAL (default generated behavior)
Map<String, String> localAttrs = Map.of(
    "tpf.idempotency.policy", "CONTEXT_STABLE",
    "tpf.function.invocation.mode", "LOCAL");
FunctionTransportContext localCtx = new FunctionTransportContext(requestId, functionName, "invoke-step", localAttrs);

// REMOTE (adapter-routed invocation)
Map<String, String> attrs = Map.of(
    "tpf.idempotency.policy", "EXPLICIT",
    "tpf.idempotency.key", "order-12345",
    "tpf.function.invocation.mode", "REMOTE",
    "tpf.function.target.runtime", "pipeline",
    "tpf.function.target.module", "index-document-svc",
    "tpf.function.target.handler", "ProcessIndexDocumentFunctionHandler");
FunctionTransportContext remoteCtx = new FunctionTransportContext(requestId, functionName, "invoke-step", attrs);

// REMOTE (direct URL target via tpf.function.target.url)
Map<String, String> directUrlAttrs = Map.of(
    "tpf.function.invocation.mode", "REMOTE",
    "tpf.function.target.url", "https://target-endpoint");
FunctionTransportContext remoteUrlCtx = new FunctionTransportContext(requestId, functionName, "invoke-step", directUrlAttrs);

Here, "contract metadata" means stable, transport-level routing semantics carried with each invocation. "Remote invoke adapter path" means the runtime adapter implementation that reads these attributes and performs remote dispatch (for example, InvocationModeRoutingFunctionInvokeAdapter delegating to HttpRemoteFunctionInvokeAdapter).

TPF transport deduplication is best-effort; authoritative deduplication remains in business/data stores.