<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Function Runner Functionality on Porch Documentation</title><link>/v1.5/docs/5_architecture_and_components/function-runner/functionality/</link><description>Recent content in Function Runner Functionality on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/v1.5/docs/5_architecture_and_components/function-runner/functionality/index.xml" rel="self" type="application/rss+xml"/><item><title>Function Evaluation</title><link>/v1.5/docs/5_architecture_and_components/function-runner/functionality/function-evaluation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/function-runner/functionality/function-evaluation/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>Function evaluation is the core responsibility of the Function Runner - executing KRM (Kubernetes Resource Model) functions through pluggable evaluator strategies. The system uses a strategy pattern where different evaluators handle function execution in different ways (pod-based, executable, or chained), all conforming to a common interface.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Function Evaluation System │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Evaluator │ │ Execution │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Interface │ ───&amp;gt; │ Strategies │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Common │ │ • Pod Evaluator │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Contract │ │ • Exec Evaluator│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Pluggable │ │ • Multi Eval │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └────────┬────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Wrapper │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Server │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • gRPC Frontend │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Binary Exec │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Result Parse │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="evaluator-interface">Evaluator Interface&lt;/h2>&lt;p>All evaluators implement a common interface that defines the contract for function execution.&lt;/p></description></item><item><title>Pod Lifecycle Management</title><link>/v1.5/docs/5_architecture_and_components/function-runner/functionality/pod-lifecycle-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/function-runner/functionality/pod-lifecycle-management/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>Pod lifecycle management orchestrates the complete lifecycle of function execution pods from creation through caching, reuse, and eventual garbage collection. The system maintains a pool of ready-to-use pods for frequently executed functions while automatically cleaning up unused pods based on time-to-live policies.&lt;/p>
&lt;p>The architecture consists of two primary components:&lt;/p>
&lt;p>&lt;strong>Pod Cache Manager&lt;/strong> - Central coordinator running in a single goroutine that manages the pod cache, handles evaluation requests, processes pod readiness notifications, and performs periodic garbage collection. Uses channels for all communication to eliminate mutex synchronization.&lt;/p></description></item><item><title>Image and Registry Management</title><link>/v1.5/docs/5_architecture_and_components/function-runner/functionality/image-registry-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/function-runner/functionality/image-registry-management/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The Function Runner manages container image metadata and registry authentication to optimize pod creation and support private registries. The system caches image metadata (digest and entrypoint) to avoid repeated registry calls, handles authentication for private registries using Docker config format, and supports TLS configuration for secure registry connections.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Image and Registry Management │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Image │ │ Registry │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Metadata │ ───&amp;gt; │ Authentication │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Caching │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ • Default │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Digest │ │ • Custom Auth │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Entrypoint │ │ • TLS Config │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • In-Memory │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └────────┬────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌───────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Secret │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Management │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Creation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Synchronization│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Pod Injection │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └───────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="image-metadata-caching">Image Metadata Caching&lt;/h2>&lt;p>The pod manager caches image metadata to avoid repeated registry API calls during pod creation.&lt;/p></description></item></channel></rss>