pub struct Config {
pub agent: String,
pub offered: Offered,
pub want_policy: WantPolicy,
pub budget: Option<usize>,
pub limits: Limits,
pub walk_pool: Option<Arc<WalkPool>>,
}Expand description
Knobs the SSH layer sets per connection.
Fields§
§agent: StringThe agent= string. Defaults to gunnar/<version>.
offered: OfferedWhich optional v2 features are on offer.
want_policy: WantPolicyWhich object ids a client may want.
budget: Option<usize>An operator’s explicit cap on the objects one traversal may hold.
None by default, and that is not a guard left off.
Limits::walk_bytes is the ceiling that ships, in bytes, and this is
--fetch-budget for an operator who wants a second one in objects.
It used to default to crate::DEFAULT_BUDGET, and leaving it there
would have made the byte ceiling decorative: MEASURED 2026-08-05,
ten million objects refuses a clone of a 14 042 000-object repository
that the same machine serves in 5.59 GB, so the object cap and not the
memory would still have been what decided.
See crate::DEFAULT_BUDGET for why the unit was wrong and
limits for the ceilings that are about bytes.
limits: LimitsThe memory ceilings this connection serves under.
Defaults to Limits::default, which is every ceiling on. See
limits.
walk_pool: Option<Arc<WalkPool>>The server-wide purse this connection’s traversals spend from.
None by default, and this is the one field where that is not a guard
left off. A pool is shared state between connections, so it can only be
created by whatever owns them all: gunnar serve builds one sized to the
machine and hands the same Arc to every session. A Config built by
hand — a test, gunnar mirror, an embedding — has no siblings to share
with, and giving it a private pool of its own would be a ceiling that
bounds nothing while reading as if it did.
Limits::walk_bytes is the per-request half and is on by default. See
WalkPool for why one without the other is not a
bound on the server.