Files
document-haness/docs/clean-architecture-backend-template/final/evidence/raw/a11-f002-pool-route-exceeds-total.txt
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

55 lines
2.7 KiB
Plaintext

# 레코드 정규 생성자가 막는 조건
if (maxTotalConnections < 1 || maxConnectionsPerRoute < 1 || maxPendingAcquires < 0) {
throw new IllegalArgumentException("pool limits must be positive");
}
if (maxConnectionsPerRoute > maxTotalConnections) {
throw new IllegalArgumentException("per-route pool must not exceed the total pool");
}
# 검증기가 같은 조건을 다시 본다
if (profile.pool().maxConnectionsPerRoute() > profile.pool().maxTotalConnections()) {
// A per-route ceiling above the total is incoherent, and on Reactor — where the per-route
// knob is the only one that exists — it silently becomes the effective limit.
out.add(violation("POOL_ROUTE_EXCEEDS_TOTAL", profile, "pool.max-connections-per-route"));
}
# 검증기가 약속하는 보고 형태
/**
* Fail-closed startup validation for a Named Client Profile (design §11.2, §30.1).
*
* <p>Every guard in the design has exactly one stable violation code here. The result is sorted so
* a configuration error reports deterministically across runs and machines.
*/
# 검증기가 내는 코드 수
violation( 호출 40개, 서로 다른 코드 35개
한 줄 grep 이 보는 코드 34개, 놓치는 것 ['PROXY_AMBIENT_NO_PROXY_UNSUPPORTED']
}
if (profile.proxy().importAmbientNoProxy()) {
out.add(
violation(
"PROXY_AMBIENT_NO_PROXY_UNSUPPORTED", profile, "proxy.import-ambient-no-proxy"));
}
# PoolSettings 를 만드는 곳 (src/main 전체)
bootstrap/autoconfigure/httpclient/HttpClientProfileFactory.java:83: return new PoolSettings(
# 같은 목록의 다른 코드 하나
profiles.forEach(
(name, profile) -> {
if (!seenNames.add(name.value())) {
violations.add("DUPLICATE_CLIENT_NAME profile=" + name.value());
}
}
if (seen.contains(name)) {
throw new IllegalStateException(where + " declares '" + name + "' more than once");
}
# 두 코드를 이름으로 참조하는 곳 (저장소 전체, 확장자 제한 없음)
bootstrap/autoconfigure/httpclient/HttpClientStartupValidator.java:70: violations.add("DUPLICATE_CLIENT_NAME profile=" + name.value());
adapter/outbound/httpclient/profile/ClientProfileValidator.java:195: out.add(violation("POOL_ROUTE_EXCEEDS_TOTAL", profile, "pool.max-connections-per-route"));
docs/httpclient/configuration-reference.md:191:`RETRY_BACKOFF_REQUIRED`, `MISSING_PRODUCTION_SETTING`, `DUPLICATE_CLIENT_NAME`,
docs/httpclient/configuration-reference.md:194:`HTTP2_REQUIRED_TRANSPORT_UNSUPPORTED`, `POOL_ROUTE_EXCEEDS_TOTAL`,
docs/httpclient/configuration-reference.md:209:- `POOL_ROUTE_EXCEEDS_TOTAL` — a per-route ceiling above the total is incoherent, and on Reactor,