Files
document-haness/docs/clean-architecture-backend-template/final/evidence/rendered/analysis-finding-a05-f032.svg
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

337 lines
72 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="6750" viewBox="0 0 1200 6750" role="img">
<title>terminal evidence</title>
<desc>Terminal-style rendering generated from retained command output. Sensitive-looking values are redacted in the visual asset.</desc>
<rect x="1" y="1" width="1198" height="6748" rx="14" fill="#0d1117" stroke="#30363d"/>
<rect x="1" y="1" width="1198" height="44" rx="14" fill="#161b22"/>
<rect x="1" y="30" width="1198" height="14" fill="#161b22"/>
<circle cx="24" cy="22" r="6" fill="#ff5f57"/>
<circle cx="44" cy="22" r="6" fill="#febc2e"/>
<circle cx="64" cy="22" r="6" fill="#28c840"/>
<text x="92" y="27" fill="#8b949e" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">terminal evidence</text>
<text x="24" y="68" fill="#c9d1d9" font-size="15" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">$ #!/bin/bash
set -euo pipefail
cd /shared/codebase/clean-architecture-backend-template
. /tmp/lib.sh
W=.github/workflow</tspan><tspan x="24" dy="22">s/jpa-nightly.yml
B=src/adapter/outbound/persistence-jpa/build.gradle
D=src/adapter/outbound/persistence-jpa/src/jpaPlat</tspan><tspan x="24" dy="22">formPerformanceTest/java/dev/caskeleton/adapter/outbound/persistence/platform/pool
for f in &quot;$W&quot; &quot;$B&quot;; do test -f &quot;$f&quot;; </tspan><tspan x="24" dy="22">done
echo &quot;# 야간 워크플로가 이 레인에 대해 적는 것&quot;
at &quot;$W&quot; 122 134 jpa-nightly.yml
echo
echo &quot;# 그 레인이 도는 소스 </tspan><tspan x="24" dy="22">세트와 그 안의 시험 파일&quot;
at &quot;$B&quot; 281 310 persistence-jpa/build.gradle
git ls-files -- &#x27;src/adapter/outbound/persistence</tspan><tspan x="24" dy="22">-jpa/src/jpaPlatformPerformanceTest/**/*.java&#x27; | sed &#x27;s#.*/# #&#x27;
echo
echo &quot;# 세 시험 파일의 시험과 단언 전수&quot;
for f in</tspan><tspan x="24" dy="22"> &quot;$D&quot;/*.java; do
echo &quot; --- $(basename &quot;$f&quot;)&quot;
{ grep -nE &#x27; void [a-zA-Z]+\(|assertThat|assertThatThrownBy|new Pool</tspan><tspan x="24" dy="22">Measurement|getThreadsAwaitingConnection&#x27; &quot;$f&quot; || true; } \
| sed -E &#x27;s#^([0-9]+): *# :\1 #&#x27;
done
echo
echo &quot;# </tspan><tspan x="24" dy="22">대기 수를 단언하는 자리&quot;
printf &#x27; measurement.pending() 를 단언하는 줄 : %s 개\n&#x27; \
&quot;$({ git grep -n &#x27;pending()&#x27; -- &#x27;</tspan><tspan x="24" dy="22">src/adapter/outbound/persistence-jpa/src/jpaPlatformPerformanceTest/**/*.java&#x27; || true; } | grep -c . || true)&quot;
echo &quot; </tspan><tspan x="24" dy="22">그 줄이 있는 시험의 입력 :&quot;
at &quot;$D/PoolPressureContractTest.java&quot; 26 47 PoolPressureContractTest.java
echo &quot; 포화를 다</tspan><tspan x="24" dy="22">루는 세 시험 전문 :&quot;
at &quot;$D/HikariPoolSaturationContractTest.java&quot; 30 34 HikariPoolSaturationContractTest.java
at &quot;$D/Hi</tspan><tspan x="24" dy="22">kariPoolSaturationContractTest.java&quot; 50 118 HikariPoolSaturationContractTest.java
echo
echo &quot;# 나머지 두 주장에는 실제 </tspan><tspan x="24" dy="22">단언이 있다&quot;
at &quot;$D/RequiresNewPoolPressureContractTest.java&quot; 43 89 RequiresNewPoolPressureContractTest.java
echo
echo </tspan><tspan x="24" dy="22">&quot;# PoolMeasurement 는 어디서 온 타입인가&quot;
printf &#x27; 세 시험이 그것을 어디서 import 하는가 :\n&#x27;
hits &#x27;import .*PoolMeasur</tspan><tspan x="24" dy="22">ement&#x27; &#x27;src/**/*.java&#x27; \
| sed -E &#x27;s#^.*/([A-Za-z0-9_]+\.java):([0-9]+): *# \1:\2 #&#x27;
P=$(git ls-files -- &#x27;**/testk</tspan><tspan x="24" dy="22">it/**/PoolMeasurement.java&#x27;)
test -f &quot;$P&quot;
at &quot;$P&quot; 6 34 PoolMeasurement.java
printf &#x27; 프로덕션에서 대기 수를 읽는 자리 :</tspan><tspan x="24" dy="22"> %s 개\n&#x27; \
&quot;$(count &#x27;getThreadsAwaitingConnection|HikariPoolMXBean&#x27; &#x27;src/**/src/main/**&#x27;)&quot;
printf &#x27; [대조] 그 검색이</tspan><tspan x="24" dy="22"> 훑은 main 파일 : %s 개\n&#x27; &quot;$(git ls-files -- &#x27;src/**/src/main/**&#x27; | grep -c .)&quot;
</tspan></text>
<text x="24" y="486" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">cwd: /shared/codebase/clean-architecture-backend-template</tspan></text>
<text x="24" y="508" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">time: 2026-09-04T07:10:22+00:00 · exit 0</tspan></text>
<line x1="24" y1="522" x2="1176" y2="522" stroke="#30363d"/>
<text x="24" y="562" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 야간 워크플로가 이 레인에 대해 적는 것</tspan></text>
<text x="24" y="584" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:122 - name: Verify pool saturation and REQUIRES_NEW connection behaviour</tspan></text>
<text x="24" y="606" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:123 working-directory: src</tspan></text>
<text x="24" y="628" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:124 # A behaviour contract, not a measurement. This step used to switch assertions off with an</tspan></text>
<text x="24" y="650" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:125 # explicit property and call the result a certification, so the only threshold it ever</tspan></text>
<text x="24" y="672" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:126 # asserted was that thresholds were not being asserted. What</tspan></text>
<text x="24" y="694" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:127 # it checks now — that REQUIRES_NEW needs two connections per concurrent thread, that a</tspan></text>
<text x="24" y="716" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:128 # saturated pool reports its pending count, that a caller waits rather than proceeding</tspan></text>
<text x="24" y="738" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:129 # without a connection — is true on any runner, so there is nothing to switch off.</tspan></text>
<text x="24" y="760" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:130 run: &gt;-</tspan></text>
<text x="24" y="782" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:131 ./gradlew</tspan></text>
<text x="24" y="804" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:132 :adapter:outbound:persistence-jpa:jpaPlatformPoolContractTest</tspan></text>
<text x="24" y="826" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:133 --no-daemon</tspan></text>
<text x="24" y="848" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> jpa-nightly.yml:134 --stacktrace</tspan></text>
<text x="24" y="870" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="892" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 레인이 도는 소스 세트와 그 안의 시험 파일</tspan></text>
<text x="24" y="914" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:281 // What the lane genuinely verifies is a behaviour contract: a REQUIRES_NEW depth of one need</tspan><tspan x="24" dy="22">s two</tspan></text>
<text x="24" y="958" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:282 // connections per concurrent thread, a saturated pool reports its pending count, and a calle</tspan><tspan x="24" dy="22">r waits</tspan></text>
<text x="24" y="1002" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:283 // rather than proceeding without a connection. Those are true on any machine, so they need n</tspan><tspan x="24" dy="22">o flag</tspan></text>
<text x="24" y="1046" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:284 // — and this name does not promise a number nobody measured. A real performance gate needs </tspan><tspan x="24" dy="22">a</tspan></text>
<text x="24" y="1090" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:285 // dedicated runner, warmup and sample counts, and recorded thresholds; when that exists it b</tspan><tspan x="24" dy="22">elongs</tspan></text>
<text x="24" y="1134" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:286 // in a lane of its own rather than behind a boolean on this one.</tspan></text>
<text x="24" y="1156" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:287 def jpaPlatformPoolContractTest = tasks.register(&#x27;jpaPlatformPoolContractTest&#x27;, Test) {</tspan></text>
<text x="24" y="1178" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:288 group = &#x27;verification&#x27;</tspan></text>
<text x="24" y="1200" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:289 description = &#x27;Verifies Hikari pool and REQUIRES_NEW connection behaviour (design §38).&#x27;</tspan></text>
<text x="24" y="1222" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:290 testClassesDirs = sourceSets.jpaPlatformPerformanceTest.output.classesDirs</tspan></text>
<text x="24" y="1244" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:291 classpath = sourceSets.jpaPlatformPerformanceTest.runtimeClasspath</tspan></text>
<text x="24" y="1266" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:292 useJUnitPlatform()</tspan></text>
<text x="24" y="1288" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:293 failOnNoDiscoveredTests = true</tspan></text>
<text x="24" y="1310" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:294 outputs.upToDateWhen { false }</tspan></text>
<text x="24" y="1332" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:295 jvmArgs(&#x27;-Duser.timezone=UTC&#x27;)</tspan></text>
<text x="24" y="1354" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:296 }</tspan></text>
<text x="24" y="1376" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:297 </tspan></text>
<text x="24" y="1398" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:298 // The JPA release gate (design §41). Aggregates every lane whose absence would let one of t</tspan><tspan x="24" dy="22">he</tspan></text>
<text x="24" y="1442" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:299 // documented gates in docs/jpa/support-matrix.md pass unverified.</tspan></text>
<text x="24" y="1464" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:300 tasks.register(&#x27;jpaPlatformReleaseGate&#x27;) {</tspan></text>
<text x="24" y="1486" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:301 group = &#x27;verification&#x27;</tspan></text>
<text x="24" y="1508" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:302 description = &#x27;Runs every JPA platform lane required for a release (design §41).&#x27;</tspan></text>
<text x="24" y="1530" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:303 dependsOn tasks.named(&#x27;test&#x27;)</tspan></text>
<text x="24" y="1552" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:304 dependsOn jpaPlatformContractTest</tspan></text>
<text x="24" y="1574" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:305 dependsOn jpaPlatformMigrationTest</tspan></text>
<text x="24" y="1596" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:306 dependsOn jpaPlatformFailureTest</tspan></text>
<text x="24" y="1618" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:307 dependsOn jpaPlatformQueryPlanTest</tspan></text>
<text x="24" y="1640" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:308 dependsOn jpaPlatformSecurityTest</tspan></text>
<text x="24" y="1662" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:309 dependsOn jpaPlatformPoolContractTest</tspan></text>
<text x="24" y="1684" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> persistence-jpa/build.gradle:310 }</tspan></text>
<text x="24" y="1706" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java</tspan></text>
<text x="24" y="1728" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java</tspan></text>
<text x="24" y="1750" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java</tspan></text>
<text x="24" y="1772" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="1794" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 세 시험 파일의 시험과 단언 전수</tspan></text>
<text x="24" y="1816" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> --- HikariPoolSaturationContractTest.java</tspan></text>
<text x="24" y="1838" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :3 import static org.assertj.core.api.Assertions.assertThat;</tspan></text>
<text x="24" y="1860" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :4 import static org.assertj.core.api.Assertions.assertThatThrownBy;</tspan></text>
<text x="24" y="1882" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :52 void saturatedPoolFailsWithinItsTimeout() throws SQLException {</tspan></text>
<text x="24" y="1904" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :61 assertThatThrownBy(pool::getConnection).isInstanceOf(SQLException.class);</tspan></text>
<text x="24" y="1926" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :64 assertThat(waited)</tspan></text>
<text x="24" y="1948" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :77 void releasingAConnectionLetsTheNextCallerThrough() throws SQLException {</tspan></text>
<text x="24" y="1970" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :84 assertThat(third.isValid(1)).isTrue();</tspan></text>
<text x="24" y="1992" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :92 void measurementReportsPoolState() throws SQLException {</tspan></text>
<text x="24" y="2014" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :97 new PoolMeasurement(</tspan></text>
<text x="24" y="2036" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :100 bean.getThreadsAwaitingConnection(),</tspan></text>
<text x="24" y="2058" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :103 assertThat(measurement.active()).isEqualTo(1);</tspan></text>
<text x="24" y="2080" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :104 assertThat(measurement.total()).isGreaterThanOrEqualTo(1);</tspan></text>
<text x="24" y="2102" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :105 assertThat(held.isValid(1)).isTrue();</tspan></text>
<text x="24" y="2124" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> --- PoolPressureContractTest.java</tspan></text>
<text x="24" y="2146" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :3 import static org.assertj.core.api.Assertions.assertThat;</tspan></text>
<text x="24" y="2168" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :28 void reportsPendingAndAcquireLatencyTogether() {</tspan></text>
<text x="24" y="2190" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :29 var measurement = new PoolMeasurement(4, 2, 3, Duration.ofMillis(80));</tspan></text>
<text x="24" y="2212" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :31 assertThat(measurement.pending()).isEqualTo(3);</tspan></text>
<text x="24" y="2234" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :32 assertThat(measurement.acquireLatency()).isEqualTo(Duration.ofMillis(80));</tspan></text>
<text x="24" y="2256" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :33 assertThat(measurement.total()).isEqualTo(6);</tspan></text>
<text x="24" y="2278" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :34 assertThat(measurement.saturated()).isTrue();</tspan></text>
<text x="24" y="2300" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :39 void requiresNewNeedsTwoConnectionsPerThread() {</tspan></text>
<text x="24" y="2322" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :45 assertThat(required)</tspan></text>
<text x="24" y="2344" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> --- RequiresNewPoolPressureContractTest.java</tspan></text>
<text x="24" y="2366" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :3 import static org.assertj.core.api.Assertions.assertThat;</tspan></text>
<text x="24" y="2388" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :4 import static org.assertj.core.api.Assertions.assertThatThrownBy;</tspan></text>
<text x="24" y="2410" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :45 void poolOfOneCannotServeAnInnerTransaction() throws SQLException {</tspan></text>
<text x="24" y="2432" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :50 assertThatThrownBy(pool::getConnection)</tspan></text>
<text x="24" y="2454" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :61 void poolOfTwoServesTheSameNesting() throws SQLException {</tspan></text>
<text x="24" y="2476" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :68 assertThat(inner.isValid(1)).isTrue();</tspan></text>
<text x="24" y="2498" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :69 assertThat(inner).isNotSameAs(outer);</tspan></text>
<text x="24" y="2520" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :80 void sizingRuleMatchesTheObservedRequirement() {</tspan></text>
<text x="24" y="2542" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> :86 assertThat(required)</tspan></text>
<text x="24" y="2564" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="2586" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 대기 수를 단언하는 자리</tspan></text>
<text x="24" y="2608" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> measurement.pending() 를 단언하는 줄 : 1 개</tspan></text>
<text x="24" y="2630" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 그 줄이 있는 시험의 입력 :</tspan></text>
<text x="24" y="2652" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:26 @Test</tspan></text>
<text x="24" y="2674" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:27 @DisplayName(&quot;pending count and acquire latency are reported together&quot;)</tspan></text>
<text x="24" y="2696" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:28 void reportsPendingAndAcquireLatencyTogether() {</tspan></text>
<text x="24" y="2718" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:29 var measurement = new PoolMeasurement(4, 2, 3, Duration.ofMillis(80));</tspan></text>
<text x="24" y="2740" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:30 </tspan></text>
<text x="24" y="2762" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:31 assertThat(measurement.pending()).isEqualTo(3);</tspan></text>
<text x="24" y="2784" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:32 assertThat(measurement.acquireLatency()).isEqualTo(Duration.ofMillis(80));</tspan></text>
<text x="24" y="2806" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:33 assertThat(measurement.total()).isEqualTo(6);</tspan></text>
<text x="24" y="2828" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:34 assertThat(measurement.saturated()).isTrue();</tspan></text>
<text x="24" y="2850" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:35 }</tspan></text>
<text x="24" y="2872" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:36 </tspan></text>
<text x="24" y="2894" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:37 @Test</tspan></text>
<text x="24" y="2916" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:38 @DisplayName(&quot;a REQUIRES_NEW depth of one needs two connections per concurrent thread&quot;)</tspan></text>
<text x="24" y="2938" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:39 void requiresNewNeedsTwoConnectionsPerThread() {</tspan></text>
<text x="24" y="2960" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:40 int concurrentThreads = 8;</tspan></text>
<text x="24" y="2982" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:41 int maxRequiresNewDepth = 1;</tspan></text>
<text x="24" y="3004" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:42 </tspan></text>
<text x="24" y="3026" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:43 int required = concurrentThreads * (1 + maxRequiresNewDepth) + 1;</tspan></text>
<text x="24" y="3048" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:44 </tspan></text>
<text x="24" y="3070" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:45 assertThat(required)</tspan></text>
<text x="24" y="3092" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:46 .as(&quot;this is a property of REQUIRES_NEW, not of the machine, so it needs no opt-in&quot;)</tspan></text>
<text x="24" y="3114" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:47 .isEqualTo(17);</tspan></text>
<text x="24" y="3136" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 포화를 다루는 세 시험 전문 :</tspan></text>
<text x="24" y="3158" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:30 class HikariPoolSaturationContractTest {</tspan></text>
<text x="24" y="3180" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:31 </tspan></text>
<text x="24" y="3202" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:32 private static final int POOL_SIZE = 2;</tspan></text>
<text x="24" y="3224" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:33 private static final Duration ACQUIRE_TIMEOUT = Duration.ofMillis(500);</tspan></text>
<text x="24" y="3246" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:34 </tspan></text>
<text x="24" y="3268" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:50 @Test</tspan></text>
<text x="24" y="3290" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:51 @DisplayName(&quot;a saturated pool fails within its acquisition timeout&quot;)</tspan></text>
<text x="24" y="3312" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:52 void saturatedPoolFailsWithinItsTimeout() throws SQLException {</tspan></text>
<text x="24" y="3334" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:53 try (HikariDataSource pool = pool()) {</tspan></text>
<text x="24" y="3356" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:54 List&lt;Connection&gt; held = new ArrayList&lt;&gt;();</tspan></text>
<text x="24" y="3378" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:55 try {</tspan></text>
<text x="24" y="3400" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:56 for (int index = 0; index &lt; POOL_SIZE; index++) {</tspan></text>
<text x="24" y="3422" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:57 held.add(pool.getConnection());</tspan></text>
<text x="24" y="3444" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:58 }</tspan></text>
<text x="24" y="3466" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:59 </tspan></text>
<text x="24" y="3488" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:60 Instant startedAt = Instant.now();</tspan></text>
<text x="24" y="3510" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:61 assertThatThrownBy(pool::getConnection).isInstanceOf(SQLException.class);</tspan></text>
<text x="24" y="3532" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:62 Duration waited = Duration.between(startedAt, Instant.now());</tspan></text>
<text x="24" y="3554" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:63 </tspan></text>
<text x="24" y="3576" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:64 assertThat(waited)</tspan></text>
<text x="24" y="3598" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:65 .as(&quot;an unbounded wait turns exhaustion into requests that never return&quot;)</tspan></text>
<text x="24" y="3620" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:66 .isLessThan(ACQUIRE_TIMEOUT.plusSeconds(2));</tspan></text>
<text x="24" y="3642" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:67 } finally {</tspan></text>
<text x="24" y="3664" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:68 for (Connection connection : held) {</tspan></text>
<text x="24" y="3686" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:69 connection.close();</tspan></text>
<text x="24" y="3708" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:70 }</tspan></text>
<text x="24" y="3730" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:71 }</tspan></text>
<text x="24" y="3752" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:72 }</tspan></text>
<text x="24" y="3774" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:73 }</tspan></text>
<text x="24" y="3796" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:74 </tspan></text>
<text x="24" y="3818" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:75 @Test</tspan></text>
<text x="24" y="3840" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:76 @DisplayName(&quot;releasing a connection lets the next caller through&quot;)</tspan></text>
<text x="24" y="3862" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:77 void releasingAConnectionLetsTheNextCallerThrough() throws SQLException {</tspan></text>
<text x="24" y="3884" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:78 try (HikariDataSource pool = pool()) {</tspan></text>
<text x="24" y="3906" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:79 Connection first = pool.getConnection();</tspan></text>
<text x="24" y="3928" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:80 Connection second = pool.getConnection();</tspan></text>
<text x="24" y="3950" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:81 first.close();</tspan></text>
<text x="24" y="3972" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:82 </tspan></text>
<text x="24" y="3994" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:83 try (Connection third = pool.getConnection()) {</tspan></text>
<text x="24" y="4016" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:84 assertThat(third.isValid(1)).isTrue();</tspan></text>
<text x="24" y="4038" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:85 }</tspan></text>
<text x="24" y="4060" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:86 second.close();</tspan></text>
<text x="24" y="4082" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:87 }</tspan></text>
<text x="24" y="4104" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:88 }</tspan></text>
<text x="24" y="4126" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:89 </tspan></text>
<text x="24" y="4148" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:90 @Test</tspan></text>
<text x="24" y="4170" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:91 @DisplayName(&quot;the measurement reports what the pool is actually doing&quot;)</tspan></text>
<text x="24" y="4192" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:92 void measurementReportsPoolState() throws SQLException {</tspan></text>
<text x="24" y="4214" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:93 try (HikariDataSource pool = pool()) {</tspan></text>
<text x="24" y="4236" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:94 try (Connection held = pool.getConnection()) {</tspan></text>
<text x="24" y="4258" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:95 var bean = pool.getHikariPoolMXBean();</tspan></text>
<text x="24" y="4280" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:96 var measurement =</tspan></text>
<text x="24" y="4302" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:97 new PoolMeasurement(</tspan></text>
<text x="24" y="4324" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:98 bean.getActiveConnections(),</tspan></text>
<text x="24" y="4346" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:99 bean.getIdleConnections(),</tspan></text>
<text x="24" y="4368" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:100 bean.getThreadsAwaitingConnection(),</tspan></text>
<text x="24" y="4390" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:101 Duration.ZERO);</tspan></text>
<text x="24" y="4412" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:102 </tspan></text>
<text x="24" y="4434" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:103 assertThat(measurement.active()).isEqualTo(1);</tspan></text>
<text x="24" y="4456" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:104 assertThat(measurement.total()).isGreaterThanOrEqualTo(1);</tspan></text>
<text x="24" y="4478" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:105 assertThat(held.isValid(1)).isTrue();</tspan></text>
<text x="24" y="4500" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:106 }</tspan></text>
<text x="24" y="4522" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:107 }</tspan></text>
<text x="24" y="4544" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:108 }</tspan></text>
<text x="24" y="4566" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:109 </tspan></text>
<text x="24" y="4588" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:110 private static HikariDataSource pool() {</tspan></text>
<text x="24" y="4610" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:111 HikariConfig config = new HikariConfig();</tspan></text>
<text x="24" y="4632" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:112 config.setJdbcUrl(container.getJdbcUrl());</tspan></text>
<text x="24" y="4654" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:113 config.setUsername(container.getUsername());</tspan></text>
<text x="24" y="4676" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:114 config.setPassword(container.getPassword());</tspan></text>
<text x="24" y="4698" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:115 config.setMaximumPoolSize(POOL_SIZE);</tspan></text>
<text x="24" y="4720" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:116 config.setConnectionTimeout(ACQUIRE_TIMEOUT.toMillis());</tspan></text>
<text x="24" y="4742" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:117 return new HikariDataSource(config);</tspan></text>
<text x="24" y="4764" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:118 }</tspan></text>
<text x="24" y="4786" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="4808" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 나머지 두 주장에는 실제 단언이 있다</tspan></text>
<text x="24" y="4830" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:43 @Test</tspan></text>
<text x="24" y="4852" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:44 @DisplayName(&quot;a pool of one deadlocks the moment an inner transaction is needed&quot;</tspan><tspan x="24" dy="22">)</tspan></text>
<text x="24" y="4896" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:45 void poolOfOneCannotServeAnInnerTransaction() throws SQLException {</tspan></text>
<text x="24" y="4918" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:46 try (HikariDataSource pool = pool(1)) {</tspan></text>
<text x="24" y="4940" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:47 try (Connection outer = pool.getConnection()) {</tspan></text>
<text x="24" y="4962" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:48 outer.setAutoCommit(false);</tspan></text>
<text x="24" y="4984" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:49 </tspan></text>
<text x="24" y="5006" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:50 assertThatThrownBy(pool::getConnection)</tspan></text>
<text x="24" y="5028" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:51 .as(&quot;the outer transaction still holds its connection while the inner </tspan><tspan x="24" dy="22">one is opened&quot;)</tspan></text>
<text x="24" y="5072" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:52 .isInstanceOf(SQLException.class);</tspan></text>
<text x="24" y="5094" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:53 </tspan></text>
<text x="24" y="5116" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:54 outer.rollback();</tspan></text>
<text x="24" y="5138" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:55 }</tspan></text>
<text x="24" y="5160" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:56 }</tspan></text>
<text x="24" y="5182" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:57 }</tspan></text>
<text x="24" y="5204" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:58 </tspan></text>
<text x="24" y="5226" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:59 @Test</tspan></text>
<text x="24" y="5248" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:60 @DisplayName(&quot;a pool of two serves the same nesting&quot;)</tspan></text>
<text x="24" y="5270" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:61 void poolOfTwoServesTheSameNesting() throws SQLException {</tspan></text>
<text x="24" y="5292" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:62 try (HikariDataSource pool = pool(2)) {</tspan></text>
<text x="24" y="5314" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:63 try (Connection outer = pool.getConnection()) {</tspan></text>
<text x="24" y="5336" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:64 outer.setAutoCommit(false);</tspan></text>
<text x="24" y="5358" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:65 </tspan></text>
<text x="24" y="5380" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:66 try (Connection inner = pool.getConnection()) {</tspan></text>
<text x="24" y="5402" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:67 inner.setAutoCommit(false);</tspan></text>
<text x="24" y="5424" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:68 assertThat(inner.isValid(1)).isTrue();</tspan></text>
<text x="24" y="5446" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:69 assertThat(inner).isNotSameAs(outer);</tspan></text>
<text x="24" y="5468" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:70 inner.commit();</tspan></text>
<text x="24" y="5490" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:71 }</tspan></text>
<text x="24" y="5512" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:72 </tspan></text>
<text x="24" y="5534" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:73 outer.rollback();</tspan></text>
<text x="24" y="5556" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:74 }</tspan></text>
<text x="24" y="5578" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:75 }</tspan></text>
<text x="24" y="5600" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:76 }</tspan></text>
<text x="24" y="5622" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:77 </tspan></text>
<text x="24" y="5644" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:78 @Test</tspan></text>
<text x="24" y="5666" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:79 @DisplayName(&quot;the sizing rule matches the observed requirement&quot;)</tspan></text>
<text x="24" y="5688" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:80 void sizingRuleMatchesTheObservedRequirement() {</tspan></text>
<text x="24" y="5710" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:81 int concurrentThreads = 1;</tspan></text>
<text x="24" y="5732" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:82 int maxRequiresNewDepth = 1;</tspan></text>
<text x="24" y="5754" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:83 </tspan></text>
<text x="24" y="5776" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:84 int required = concurrentThreads * (1 + maxRequiresNewDepth) + 1;</tspan></text>
<text x="24" y="5798" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:85 </tspan></text>
<text x="24" y="5820" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:86 assertThat(required)</tspan></text>
<text x="24" y="5842" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:87 .as(&quot;one thread at depth one needs two connections; the rule adds headroom</tspan><tspan x="24" dy="22">&quot;)</tspan></text>
<text x="24" y="5886" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:88 .isEqualTo(3);</tspan></text>
<text x="24" y="5908" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RequiresNewPoolPressureContractTest.java:89 }</tspan></text>
<text x="24" y="5930" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="5952" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># PoolMeasurement 는 어디서 온 타입인가</tspan></text>
<text x="24" y="5974" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 세 시험이 그것을 어디서 import 하는가 :</tspan></text>
<text x="24" y="5996" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolSaturationContractTest.java:8 import dev.caskeleton.adapter.outbound.persistence.testkit.pool.PoolMeasurement;</tspan></text>
<text x="24" y="6018" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolPressureContractTest.java:5 import dev.caskeleton.adapter.outbound.persistence.testkit.pool.PoolMeasurement;</tspan></text>
<text x="24" y="6040" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:6 /**</tspan></text>
<text x="24" y="6062" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:7 * A reading of connection pool pressure (design §38).</tspan></text>
<text x="24" y="6084" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:8 *</tspan></text>
<text x="24" y="6106" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:9 * &lt;p&gt;Pending count and acquire latency are recorded together because either alone is misleading. A</tspan></text>
<text x="24" y="6128" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:10 * pool can show zero pending at the instant it is sampled while callers routinely wait; a high</tspan></text>
<text x="24" y="6150" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:11 * acquire latency with no pending count gives no idea how many callers are affected.</tspan></text>
<text x="24" y="6172" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:12 */</tspan></text>
<text x="24" y="6194" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:13 public record PoolMeasurement(int active, int idle, int pending, Duration acquireLatency) {</tspan></text>
<text x="24" y="6216" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:14 </tspan></text>
<text x="24" y="6238" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:15 public PoolMeasurement {</tspan></text>
<text x="24" y="6260" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:16 Objects.requireNonNull(acquireLatency, &quot;acquireLatency&quot;);</tspan></text>
<text x="24" y="6282" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:17 if (active &lt; 0 || idle &lt; 0 || pending &lt; 0) {</tspan></text>
<text x="24" y="6304" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:18 throw new IllegalArgumentException(&quot;pool counters must not be negative&quot;);</tspan></text>
<text x="24" y="6326" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:19 }</tspan></text>
<text x="24" y="6348" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:20 if (acquireLatency.isNegative()) {</tspan></text>
<text x="24" y="6370" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:21 throw new IllegalArgumentException(&quot;acquire latency must not be negative&quot;);</tspan></text>
<text x="24" y="6392" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:22 }</tspan></text>
<text x="24" y="6414" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:23 }</tspan></text>
<text x="24" y="6436" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:24 </tspan></text>
<text x="24" y="6458" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:25 /** How many connections the pool currently holds. */</tspan></text>
<text x="24" y="6480" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:26 public int total() {</tspan></text>
<text x="24" y="6502" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:27 return active + idle;</tspan></text>
<text x="24" y="6524" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:28 }</tspan></text>
<text x="24" y="6546" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:29 </tspan></text>
<text x="24" y="6568" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:30 /** Whether callers are waiting for a connection. */</tspan></text>
<text x="24" y="6590" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:31 public boolean saturated() {</tspan></text>
<text x="24" y="6612" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:32 return pending &gt; 0;</tspan></text>
<text x="24" y="6634" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:33 }</tspan></text>
<text x="24" y="6656" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PoolMeasurement.java:34 }</tspan></text>
<text x="24" y="6678" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 프로덕션에서 대기 수를 읽는 자리 : 0 개</tspan></text>
<text x="24" y="6700" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> [대조] 그 검색이 훑은 main 파일 : 4714 개</tspan></text>
</svg>