<p dir="auto">The pluralization of rest resource names in URL paths is mostly human conceit that complicates every interaction from clients and leads to little practical benefit for end users.  In addition, it's an arbitrary transformation that cannot lead to predictable results.</p>
<p dir="auto">The use of pluralization is entirely historical, and is not based on any pattern other than making readable urls for bookmarking in a web browser.  That is not the same use case as a well constructed API - the set of end users who create urls against our API are extremely limited.</p>
<p dir="auto">I believe for v2 versions of our APIs and new API resources we should abandon pluralization in our URL paths.  We can continue to support the old paths as aliases throughout each published API version, but removing the arbitrary process of generating a plurals will allow future api logic to be simpler.</p>
<p dir="auto">Ie:</p>
<p dir="auto">/api/v1/namespace/foo/pod/bar/subresource</p>
<p dir="auto">Today the resync interval on a controller forces a LIST, and then as a consequence sends all objects down the reflector.  However, for most controllers LIST is necessary because</p>
<ol dir="auto">
<li>Watch is reliable</li>
<li>They do not mutate the store themselves and thus might have data out of sync with etcd</li>
<li>They do not "drop" events when failures happen (instead they requeue)</li>
<li>Their source of data is relatively up to date, or isn't vulnerable to event reordering (B happens before A and is therefore ignored).</li>
</ol>
<p dir="auto">We should split "sync" into "sync" (send all events to listeners) and "list" (clear the cache and fetch from etcd).</p>
<p dir="auto">All reflectors against etcd should have long "list" intervals (12-24h).  Controllers that don't mutate the store or drop events should have long relist intervals AND resync intervals.  For controllers that drop events or mutate the store in a potentially inconsistent way, we should relist infrequently and resync frequently.</p>
<p dir="auto">The following reflectors are "fast" - every 30s</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="*api.Service from controller/endpoint/endpoints_controller.go:129
*extensions.Job from controller/job/controller.go:140
*api.ReplicationController from controller/replication/replication_controller.go:209
*extensions.DaemonSet from controller/daemon/controller.go:210
*extensions.HorizontalPodAutoscaler from controller/podautoscaler/horizontal.go:121"><pre class="notranslate"><code class="notranslate">*api.Service from controller/endpoint/endpoints_controller.go:129
*extensions.Job from controller/job/controller.go:140
*api.ReplicationController from controller/replication/replication_controller.go:209
*extensions.DaemonSet from controller/daemon/controller.go:210
*extensions.HorizontalPodAutoscaler from controller/podautoscaler/horizontal.go:121
</code></pre></div>
<p dir="auto">These reflectors should have a 24h relist.  We should separate resync, then tune each appropriately.</p>