<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Functionality on Porch Documentation</title><link>/docs/5_architecture_and_components/controllers/repository-controller/functionality/</link><description>Recent content in Functionality on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/docs/5_architecture_and_components/controllers/repository-controller/functionality/index.xml" rel="self" type="application/rss+xml"/><item><title>Sync Behavior</title><link>/docs/5_architecture_and_components/controllers/repository-controller/functionality/sync-behavior/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/5_architecture_and_components/controllers/repository-controller/functionality/sync-behavior/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&lt;p&gt;The Repository controller uses two types of sync operations to keep repositories up-to-date:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Health checks&lt;/strong&gt;: Lightweight connectivity validation that runs frequently to detect failures quickly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full syncs&lt;/strong&gt;: Complete repository synchronization that runs less often to fetch content and discover packages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The controller intelligently decides which operation to perform based on repository state and configured scheduling.&lt;/p&gt;
&lt;h2 id="sync-operations"&gt;Sync Operations&lt;/h2&gt;&lt;h3 id="health-check"&gt;Health Check&lt;/h3&gt;&lt;p&gt;Health checks perform quick connectivity validation without fetching repository contents. They execute synchronously in the reconcile loop, validating only that the repository is reachable without the overhead of git operations.&lt;/p&gt;</description></item><item><title>Error Handling</title><link>/docs/5_architecture_and_components/controllers/repository-controller/functionality/error-handling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/5_architecture_and_components/controllers/repository-controller/functionality/error-handling/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&lt;p&gt;When repository operations fail, the controller uses intelligent retry logic based on error type. Different errors require different retry strategies - transient network issues retry quickly, while authentication problems that need manual intervention retry less frequently to avoid wasting resources.&lt;/p&gt;
&lt;p&gt;For how errors affect sync scheduling behavior, see 
&lt;a href="/docs/5_architecture_and_components/controllers/repository-controller/functionality/sync-behavior/#sync-behavior-during-errors"&gt;Sync Behavior During Errors&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="error-specific-retry-intervals"&gt;Error-Specific Retry Intervals&lt;/h2&gt;&lt;p&gt;The controller analyzes error messages to determine appropriate retry timing:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Error Type&lt;/th&gt;
 &lt;th&gt;Retry Interval&lt;/th&gt;
 &lt;th&gt;Error Patterns&lt;/th&gt;
 &lt;th&gt;Rationale&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Network Issues&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;30 seconds&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;no such host&amp;rdquo;, &amp;ldquo;connection refused&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Often transient, retry quickly&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;10 minutes&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;authentication required&amp;rdquo;, &amp;ldquo;permission denied&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Needs manual fix, avoid spam&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Git Repo/Branch&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;2 minutes&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;not found&amp;rdquo;, &amp;ldquo;invalid&amp;rdquo;, &amp;ldquo;branch&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;May be transient (repo creation)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Timeouts&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;1 minute&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;timeout&amp;rdquo;, &amp;ldquo;deadline exceeded&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Network congestion, moderate retry&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;TLS/SSL Issues&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;5 minutes&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;certificate&amp;rdquo;, &amp;ldquo;tls&amp;rdquo;, &amp;ldquo;ssl&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Configuration issues, less frequent&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;5 minutes&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;rate limit&amp;rdquo;, &amp;ldquo;too many requests&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Need to back off from API&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;30 seconds&lt;/td&gt;
 &lt;td&gt;All other errors&lt;/td&gt;
 &lt;td&gt;Configurable fallback&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="recovery-behavior"&gt;Recovery Behavior&lt;/h2&gt;&lt;p&gt;When a repository enters an error state, the controller adjusts its behavior to focus on recovery:&lt;/p&gt;</description></item><item><title>Status Management</title><link>/docs/5_architecture_and_components/controllers/repository-controller/functionality/status-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/5_architecture_and_components/controllers/repository-controller/functionality/status-management/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&lt;p&gt;The Repository controller maintains detailed status information to track sync operations, detect changes, and provide observability. The status includes both standard Kubernetes conditions and custom fields specific to repository synchronization.&lt;/p&gt;
&lt;h2 id="status-fields"&gt;Status Fields&lt;/h2&gt;&lt;h3 id="repository-information"&gt;Repository Information&lt;/h3&gt;&lt;p&gt;The &lt;code&gt;packageCount&lt;/code&gt; field shows how many package revisions were discovered during the last sync.&lt;/p&gt;
&lt;h3 id="git-commit-tracking"&gt;Git Commit Tracking&lt;/h3&gt;&lt;p&gt;For git repositories, the &lt;code&gt;gitCommitHash&lt;/code&gt; field contains the commit hash of the configured branch, enabling GitOps workflows to track which version is currently synced.&lt;/p&gt;</description></item></channel></rss>