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>
328 lines
71 KiB
XML
328 lines
71 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="7058" viewBox="0 0 1200 7058" 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="7056" 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
|
|
P=src/application-</tspan><tspan x="24" dy="22">core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java
|
|
R=src/appli</tspan><tspan x="24" dy="22">cation-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/DispatchOutcomeRecorder.java
|
|
S=src/a</tspan><tspan x="24" dy="22">pplication-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/NotificationDispatchService.java</tspan><tspan x="24" dy="22">
|
|
Q=src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/notification/platform/</tspan><tspan x="24" dy="22">RecipientDeliveryJpaRepository.java
|
|
E=src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound</tspan><tspan x="24" dy="22">/persistence/notification/platform/RecipientDeliveryEntity.java
|
|
I=src/adapter/outbound/persistence-jpa/src/main/java/dev</tspan><tspan x="24" dy="22">/caskeleton/adapter/outbound/persistence/notification/platform/JpaRecipientDeliveryStore.java
|
|
for f in "$P" "$R" "$S" "$</tspan><tspan x="24" dy="22">Q" "$E" "$I"; do test -f "$f"; done
|
|
|
|
echo "# 포트가 선언한 네 쓰기와 saveHeldBy 의 자바독"
|
|
hits '^ [A-Za-z].*\(|^ Opti</tspan><tspan x="24" dy="22">onal' "$P" | sed -E 's#^([0-9]+): *# RecipientDeliveryStorePort.java:\1 #'
|
|
echo
|
|
at "$P" 21 36 RecipientDeliveryStorePo</tspan><tspan x="24" dy="22">rt.java
|
|
|
|
echo
|
|
echo "# 펜싱하는 갱신문이 where 절에 넣는 것"
|
|
at "$Q" 56 82 RecipientDeliveryJpaRepository.java
|
|
echo
|
|
echo </tspan><tspan x="24" dy="22">" 세 갱신문의 where 절을 나란히 :"
|
|
hits 'WHERE id = :id|AND lease_owner|AND lease_fence|AND lease_until|int (saveProjec</tspan><tspan x="24" dy="22">tionHeldBy|transitionHeldBy|renewLease)' "$Q" \
|
|
| sed -E 's#^.*/([A-Za-z0-9_]+\.java):([0-9]+): *# \1:\2 #'
|
|
|
|
echo
|
|
</tspan><tspan x="24" dy="22">echo "# 조건 없는 save 가 실제로 덮는 컬럼"
|
|
at "$I" 32 52 JpaRecipientDeliveryStore.java
|
|
echo
|
|
at "$E" 158 182 RecipientD</tspan><tspan x="24" dy="22">eliveryEntity.java
|
|
|
|
echo
|
|
echo "# 제공자 호출 뒤 결과를 쓰는 자리"
|
|
at "$R" 14 19 DispatchOutcomeRecorder.java
|
|
at "$R" 108</tspan><tspan x="24" dy="22"> 136 DispatchOutcomeRecorder.java
|
|
|
|
echo
|
|
echo "# 같은 흐름의 다른 쓰기는 펜싱을 쓴다"
|
|
for m in 'recipients\.save\(' 'reci</tspan><tspan x="24" dy="22">pients\.transition\(' 'recipients\.saveHeldBy\(' 'recipients\.transitionHeldBy\('; do
|
|
printf ' %s\n' "$m"
|
|
hits "$m"</tspan><tspan x="24" dy="22"> 'src/application-core/src/main/**/notification/**/*.java' \
|
|
| sed -E 's#^src/(.*)/src/main/java/.*/([A-Za-z]+\.java</tspan><tspan x="24" dy="22">):([0-9]+): *# \2:\3 #'
|
|
done
|
|
|
|
echo
|
|
echo "# 디스패치가 레코더를 부르기 직전에 하는 일"
|
|
at "$S" 158 178 NotificationDi</tspan><tspan x="24" dy="22">spatchService.java
|
|
|
|
echo
|
|
echo "# 그 넷이 놓인 메서드가 자기 자바독에 적는 것"
|
|
at "$S" 398 412 NotificationDispatchServic</tspan><tspan x="24" dy="22">e.java
|
|
echo
|
|
at "$S" 417 445 NotificationDispatchService.java
|
|
|
|
echo
|
|
echo "# 그 순서를 고정하는 시험이 있는가"
|
|
printf ' </tspan><tspan x="24" dy="22">파일명에 Fenc 나 Lease 가 든 시험 파일 : %s 개\n' \
|
|
"$(git ls-files -- 'src/**/*Test*.java' 'src/**/*IT.java' | xargs </tspan><tspan x="24" dy="22">-n1 basename | { grep -iE 'fenc|lease' || true; } | { grep -vi 'release' || true; } | grep -c . || true)"
|
|
printf ' Disp</tspan><tspan x="24" dy="22">atchOutcomeRecorder 를 이름에 가진 시험 파일 : %s 개\n' \
|
|
"$(git ls-files -- 'src/**/*Test*.java' | { grep -c 'Dispatc</tspan><tspan x="24" dy="22">hOutcomeRecorder' || true; })"
|
|
echo " 펜싱 연산 이름이 나오는 시험 자리 (더블의 선언 포함) :"
|
|
hits 'saveHeldBy|transiti</tspan><tspan x="24" dy="22">onHeldBy' 'src/**/*.java' | { grep -v '/src/main/' || true; } | mod
|
|
</tspan></text>
|
|
<text x="24" y="640" 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="662" 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:01:16+00:00 · exit 0</tspan></text>
|
|
<line x1="24" y1="676" x2="1176" y2="676" stroke="#30363d"/>
|
|
<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"># 포트가 선언한 네 쓰기와 saveHeldBy 의 자바독</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">src/application-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java:12:</tspan><tspan x="24" dy="22"> Optional<RecipientDeliveryRecord> find(RecipientDeliveryId id);</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">src/application-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java:15:</tspan><tspan x="24" dy="22"> RecipientDeliveryRecord save(RecipientDeliveryRecord record);</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">src/application-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java:18:</tspan><tspan x="24" dy="22"> RecipientDeliveryRecord transition(</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">src/application-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java:35:</tspan><tspan x="24" dy="22"> Optional<RecipientDeliveryRecord> saveHeldBy(</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">src/application-core/src/main/java/dev/caskeleton/application/notification/platform/dispatch/RecipientDeliveryStorePort.java:47:</tspan><tspan x="24" dy="22"> Optional<RecipientDeliveryRecord> transitionHeldBy(</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"></tspan></text>
|
|
<text x="24" y="980" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RecipientDeliveryStorePort.java:21 /**</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"> RecipientDeliveryStorePort.java:22 * Stores a modified job only while the given lease still holds it.</tspan></text>
|
|
<text x="24" y="1024" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RecipientDeliveryStorePort.java:23 *</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"> RecipientDeliveryStorePort.java:24 * <p>The claim is fenced and the renew is fenced, and for a while the *completion* was n</tspan><tspan x="24" dy="22">ot. 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"> RecipientDeliveryStorePort.java:25 * worker whose lease expired during a provider call — the one place the platform delibe</tspan><tspan x="24" dy="22">rately</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"> RecipientDeliveryStorePort.java:26 * spends time outside a transaction — came back and wrote its outcome with an unconditi</tspan><tspan x="24" dy="22">onal</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"> RecipientDeliveryStorePort.java:27 * {@code save}, over the row a new holder had already claimed and might already have dis</tspan><tspan x="24" dy="22">patched.</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"> RecipientDeliveryStorePort.java:28 * The optimistic {@code version} column did not help: it detects a concurrent edit, not </tspan><tspan x="24" dy="22">a</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"> RecipientDeliveryStorePort.java:29 * superseded writer, and the late worker's read was recent enough to win.</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"> RecipientDeliveryStorePort.java:30 *</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"> RecipientDeliveryStorePort.java:31 * @param record the modified job</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"> RecipientDeliveryStorePort.java:32 * @param lease the lease the caller believes it holds</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"> RecipientDeliveryStorePort.java:33 * @return the stored job, or empty when the lease has been superseded and nothing was wr</tspan><tspan x="24" dy="22">itten</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"> RecipientDeliveryStorePort.java:34 */</tspan></text>
|
|
<text x="24" y="1420" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RecipientDeliveryStorePort.java:35 Optional<RecipientDeliveryRecord> saveHeldBy(</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"> RecipientDeliveryStorePort.java:36 RecipientDeliveryRecord record, RecipientLease lease);</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"></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"># 펜싱하는 갱신문이 where 절에 넣는 것</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"> RecipientDeliveryJpaRepository.java:56 /**</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"> RecipientDeliveryJpaRepository.java:57 * Writes a completion projection, and only for the holder that still owns the job.</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"> RecipientDeliveryJpaRepository.java:58 *</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"> RecipientDeliveryJpaRepository.java:59 * <p>The counterpart of {@link #renewLease}, for the write that happens *after* the </tspan><tspan x="24" dy="22">provider</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"> RecipientDeliveryJpaRepository.java:60 * call. Everything before the submission is database work a new holder would simply </tspan><tspan x="24" dy="22">redo; the</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"> RecipientDeliveryJpaRepository.java:61 * outcome is not — writing it under a superseded lease reports one worker's result </tspan><tspan x="24" dy="22">on another</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"> RecipientDeliveryJpaRepository.java:62 * worker's attempt, and the two need not agree about whether the notification was se</tspan><tspan x="24" dy="22">nt.</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"> RecipientDeliveryJpaRepository.java:63 *</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"> RecipientDeliveryJpaRepository.java:64 * <p>Conditioned on owner and fence for the same reason as the renew: two incarnatio</tspan><tspan x="24" dy="22">ns of one</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"> RecipientDeliveryJpaRepository.java:65 * configured worker id share the owner string, so the fence is what distinguishes th</tspan><tspan x="24" dy="22">em.</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"> RecipientDeliveryJpaRepository.java:66 */</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"> RecipientDeliveryJpaRepository.java:67 // clearAutomatically, because the caller re-reads this row immediately. A native upd</tspan><tspan x="24" dy="22">ate bypasses</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"> RecipientDeliveryJpaRepository.java:68 // the persistence context, so without it the re-read is served from the first-level </tspan><tspan x="24" dy="22">cache with</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"> RecipientDeliveryJpaRepository.java:69 // the values this statement just replaced.</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"> RecipientDeliveryJpaRepository.java:70 @Modifying(clearAutomatically = true, flushAutomatically = true)</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"> RecipientDeliveryJpaRepository.java:71 @Query(</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"> RecipientDeliveryJpaRepository.java:72 value =</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"> RecipientDeliveryJpaRepository.java:73 "UPDATE notification_recipient_delivery "</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"> RecipientDeliveryJpaRepository.java:74 + "SET delivery_state = :deliveryState, submission_outcome = :submissionO</tspan><tspan x="24" dy="22">utcome, "</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"> RecipientDeliveryJpaRepository.java:75 + "delivery_outcome = :deliveryOutcome, evidence_level = :evidenceLevel, </tspan><tspan x="24" dy="22">"</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"> RecipientDeliveryJpaRepository.java:76 + "ambiguous_attempt_exists = :ambiguousAttemptExists, duplicate_risk = :</tspan><tspan x="24" dy="22">duplicateRisk, "</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"> RecipientDeliveryJpaRepository.java:77 + "route_cursor = :routeCursor, attempt_count = :attemptCount, "</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"> RecipientDeliveryJpaRepository.java:78 + "last_failure_category = :lastFailureCategory, next_dispatch_at = :next</tspan><tspan x="24" dy="22">DispatchAt, "</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"> RecipientDeliveryJpaRepository.java:79 + "version = version + 1, updated_at = :now "</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"> RecipientDeliveryJpaRepository.java:80 + "WHERE id = :id AND lease_owner = :owner AND lease_fence = :fence",</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"> RecipientDeliveryJpaRepository.java:81 nativeQuery = true)</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"> RecipientDeliveryJpaRepository.java:82 int saveProjectionHeldBy(</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"></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"> 세 갱신문의 where 절을 나란히 :</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"> RecipientDeliveryJpaRepository.java:80 + "WHERE id = :id AND lease_owner = :owner AND lease_fence = :fence",</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"> RecipientDeliveryJpaRepository.java:82 int saveProjectionHeldBy(</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"> RecipientDeliveryJpaRepository.java:105 + "WHERE id = :id AND lease_owner = :owner AND lease_fence = :fence",</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"> RecipientDeliveryJpaRepository.java:107 int transitionHeldBy(</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"> RecipientDeliveryJpaRepository.java:127 + "WHERE id = :id "</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"> RecipientDeliveryJpaRepository.java:128 + "AND lease_owner = :owner "</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"> RecipientDeliveryJpaRepository.java:129 + "AND lease_fence = :fence "</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"> RecipientDeliveryJpaRepository.java:134 + "AND lease_until > :now",</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"> RecipientDeliveryJpaRepository.java:136 int renewLease(</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"> RecipientDeliveryJpaRepository.java:153 + "WHERE id = :id AND lease_owner = :owner AND lease_fence = :fence "</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"> RecipientDeliveryJpaRepository.java:154 + "AND lease_until > :now",</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"> RecipientDeliveryJpaRepository.java:169 + "WHERE id = :id AND lease_owner = :owner AND lease_fence = :fence",</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"> RecipientDeliveryJpaRepository.java:181 + "WHERE delivery_state = 'DISPATCHING' AND lease_until < :threshold "</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"></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"># 조건 없는 save 가 실제로 덮는 컬럼</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"> JpaRecipientDeliveryStore.java:32 @Override</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"> JpaRecipientDeliveryStore.java:33 public RecipientDeliveryRecord save(RecipientDeliveryRecord record) {</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"> JpaRecipientDeliveryStore.java:34 Objects.requireNonNull(record, "record");</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"> JpaRecipientDeliveryStore.java:35 RecipientDeliveryEntity entity =</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"> JpaRecipientDeliveryStore.java:36 recipients</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"> JpaRecipientDeliveryStore.java:37 .findById(record.id().value())</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"> JpaRecipientDeliveryStore.java:38 .orElseThrow(() -> new IllegalStateException("recipient delivery no longer exist</tspan><tspan x="24" dy="22">s"));</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"> JpaRecipientDeliveryStore.java:39 entity.applyProjection(</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"> JpaRecipientDeliveryStore.java:40 record.state().name(),</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"> JpaRecipientDeliveryStore.java:41 record.submissionOutcome().name(),</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"> JpaRecipientDeliveryStore.java:42 record.deliveryOutcome().name(),</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"> JpaRecipientDeliveryStore.java:43 record.evidenceLevel().name(),</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"> JpaRecipientDeliveryStore.java:44 record.ambiguousAttemptExists(),</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"> JpaRecipientDeliveryStore.java:45 record.duplicateRisk(),</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"> JpaRecipientDeliveryStore.java:46 record.routeCursor(),</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"> JpaRecipientDeliveryStore.java:47 record.attemptCount(),</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"> JpaRecipientDeliveryStore.java:48 record.lastFailureCategory().orElse(null),</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"> JpaRecipientDeliveryStore.java:49 record.nextDispatchAt().orElse(null),</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"> JpaRecipientDeliveryStore.java:50 clock.instant());</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"> JpaRecipientDeliveryStore.java:51 return mapper.toRecord(recipients.saveAndFlush(entity));</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"> JpaRecipientDeliveryStore.java:52 }</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"></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"> RecipientDeliveryEntity.java:158 /** Apply a projection update produced by the dispatcher or a projector. */</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"> RecipientDeliveryEntity.java:159 void applyProjection(</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"> RecipientDeliveryEntity.java:160 String deliveryState,</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"> RecipientDeliveryEntity.java:161 String submissionOutcome,</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"> RecipientDeliveryEntity.java:162 String deliveryOutcome,</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"> RecipientDeliveryEntity.java:163 String evidenceLevel,</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"> RecipientDeliveryEntity.java:164 boolean ambiguousAttemptExists,</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"> RecipientDeliveryEntity.java:165 boolean duplicateRisk,</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"> RecipientDeliveryEntity.java:166 int routeCursor,</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"> RecipientDeliveryEntity.java:167 int attemptCount,</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"> RecipientDeliveryEntity.java:168 String lastFailureCategory,</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"> RecipientDeliveryEntity.java:169 Instant nextDispatchAt,</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"> RecipientDeliveryEntity.java:170 Instant at) {</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"> RecipientDeliveryEntity.java:171 this.deliveryState = deliveryState;</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"> RecipientDeliveryEntity.java:172 this.submissionOutcome = submissionOutcome;</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"> RecipientDeliveryEntity.java:173 this.deliveryOutcome = deliveryOutcome;</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"> RecipientDeliveryEntity.java:174 this.evidenceLevel = evidenceLevel;</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"> RecipientDeliveryEntity.java:175 this.ambiguousAttemptExists = ambiguousAttemptExists;</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"> RecipientDeliveryEntity.java:176 this.duplicateRisk = duplicateRisk;</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"> RecipientDeliveryEntity.java:177 this.routeCursor = routeCursor;</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"> RecipientDeliveryEntity.java:178 this.attemptCount = attemptCount;</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"> RecipientDeliveryEntity.java:179 this.lastFailureCategory = lastFailureCategory;</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"> RecipientDeliveryEntity.java:180 this.nextDispatchAt = nextDispatchAt;</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"> RecipientDeliveryEntity.java:181 this.updatedAt = at;</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"> RecipientDeliveryEntity.java:182 }</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"></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"># 제공자 호출 뒤 결과를 쓰는 자리</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"> DispatchOutcomeRecorder.java:14 /**</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"> DispatchOutcomeRecorder.java:15 * Writes what an attempt proved.</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"> DispatchOutcomeRecorder.java:16 *</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"> DispatchOutcomeRecorder.java:17 * <p>Re-running this with the same result produces the same rows, because recovery after a cr</tspan><tspan x="24" dy="22">ash</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"> DispatchOutcomeRecorder.java:18 * between the provider call and the outcome write has to be a replay, not a second send.</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"> DispatchOutcomeRecorder.java:19 */</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"> DispatchOutcomeRecorder.java:108 boolean ambiguous = result.confirmation() == AttemptConfirmation.AMBIGUOUS;</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"> DispatchOutcomeRecorder.java:109 RecipientDeliveryRecord updated =</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"> DispatchOutcomeRecorder.java:110 new RecipientDeliveryRecord(</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"> DispatchOutcomeRecorder.java:111 recipient.id(),</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"> DispatchOutcomeRecorder.java:112 recipient.notificationId(),</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"> DispatchOutcomeRecorder.java:113 recipient.tenantId(),</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"> DispatchOutcomeRecorder.java:114 recipient.recipientRef(),</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"> DispatchOutcomeRecorder.java:115 recipient.locale(),</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"> DispatchOutcomeRecorder.java:116 recipient.timeZone(),</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"> DispatchOutcomeRecorder.java:117 recipient.routingPlan(),</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"> DispatchOutcomeRecorder.java:118 recipient.routeCursor(),</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"> DispatchOutcomeRecorder.java:119 ambiguous</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"> DispatchOutcomeRecorder.java:120 ? RecipientDeliveryState.RECONCILIATION_REQUIRED</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"> DispatchOutcomeRecorder.java:121 : RecipientDeliveryState.DISPATCHING,</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"> DispatchOutcomeRecorder.java:122 result.submissionOutcome(),</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"> DispatchOutcomeRecorder.java:123 recipient.deliveryOutcome(),</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"> DispatchOutcomeRecorder.java:124 recipient.evidenceLevel().strongerOf(result.evidenceLevel()),</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"> DispatchOutcomeRecorder.java:125 recipient.ambiguousAttemptExists() || ambiguous,</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"> DispatchOutcomeRecorder.java:126 recipient.duplicateRisk() || ambiguous,</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"> DispatchOutcomeRecorder.java:127 recipient.nextDispatchAt(),</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"> DispatchOutcomeRecorder.java:128 recipient.expiresAt(),</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"> DispatchOutcomeRecorder.java:129 recipient.leaseOwner(),</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"> DispatchOutcomeRecorder.java:130 recipient.leaseUntil(),</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"> DispatchOutcomeRecorder.java:131 recipient.attemptCount() + 1,</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"> DispatchOutcomeRecorder.java:132 result.failure().map(failure -> failure.category().name()),</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"> DispatchOutcomeRecorder.java:133 recipient.createdAt(),</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"> DispatchOutcomeRecorder.java:134 completedAt);</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"> DispatchOutcomeRecorder.java:135 recipients.save(updated);</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"> DispatchOutcomeRecorder.java:136 </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"></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"># 같은 흐름의 다른 쓰기는 펜싱을 쓴다</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"> recipients\.save\(</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"> DispatchOutcomeRecorder.java:135 recipients.save(updated);</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"> recipients\.transition\(</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"> NotificationAdminApplicationService.java:121 recipients.transition(</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"> NotificationDispatchService.java:139 () -> recipients.transition(work.recipient().id(), blocked.state(), Optional.empty()))</tspan><tspan x="24" dy="22">;</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"> NotificationDispatchService.java:396 recipients.transition(work.recipient().id(), state, Optional.empty());</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"> NotificationSubmissionService.java:305 recipients.transition(job.id(), RecipientDeliveryState.CANCELED, Optional.empty());</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"> ReconciliationService.java:108 recipients.transition(</tspan></text>
|
|
<text x="24" y="4874" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> recipients\.saveHeldBy\(</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"> NotificationDispatchService.java:434 recipients.saveHeldBy(advanceRoute(work.recipient(), now), lease);</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"> recipients\.transitionHeldBy\(</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"> NotificationDispatchService.java:422 recipients.transitionHeldBy(</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"> NotificationDispatchService.java:428 recipients.transitionHeldBy(</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"> NotificationDispatchService.java:436 recipients.transitionHeldBy(</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"></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"># 디스패치가 레코더를 부르기 직전에 하는 일</tspan></text>
|
|
<text x="24" y="5050" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> NotificationDispatchService.java:158 attempts.nextAttemptNo(work.recipient().id()),</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"> NotificationDispatchService.java:159 clock.instant())));</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"> NotificationDispatchService.java:160 </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"> NotificationDispatchService.java:161 if (!leases.stillHeld(lease)) {</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"> NotificationDispatchService.java:162 // Checked immediately before the side effect, which is the last moment it can stil</tspan><tspan x="24" dy="22">l be</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"> NotificationDispatchService.java:163 // prevented. Everything above is database work another holder would simply redo; a</tspan><tspan x="24" dy="22"> provider</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"> NotificationDispatchService.java:164 // submission is not — once it leaves, the recipient has the notification twice.</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"> NotificationDispatchService.java:165 return;</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"> NotificationDispatchService.java:166 }</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"> NotificationDispatchService.java:167 </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"> NotificationDispatchService.java:168 ProviderSubmissionResult result =</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"> NotificationDispatchService.java:169 submitOutsideTransaction(attempt, profile, contactPoint, content, work);</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"> NotificationDispatchService.java:170 </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"> NotificationDispatchService.java:171 DeliveryAttemptRecord recorded =</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"> NotificationDispatchService.java:172 transactions.inWrite(</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"> NotificationDispatchService.java:173 () -> recorder.record(attempt, work.recipient(), result, clock.instant()));</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"> NotificationDispatchService.java:174 </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"> NotificationDispatchService.java:175 RetryDecision next = retryPolicy.decide(retryContext(work, recorded, result, profile)</tspan><tspan x="24" dy="22">);</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"> NotificationDispatchService.java:176 applyNextAction(work, recorded, next, clock.instant(), lease);</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"> NotificationDispatchService.java:177 releaseLease(lease);</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"> NotificationDispatchService.java:178 }</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"></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"># 그 넷이 놓인 메서드가 자기 자바독에 적는 것</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"> NotificationDispatchService.java:398 });</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"> NotificationDispatchService.java:399 }</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"> NotificationDispatchService.java:400 </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"> NotificationDispatchService.java:401 /**</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"> NotificationDispatchService.java:402 * Applies the outcome, and only while this worker still holds the job.</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"> NotificationDispatchService.java:403 *</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"> NotificationDispatchService.java:404 * <p>Every write here happens *after* the provider call, which is the one stretch the </tspan><tspan x="24" dy="22">platform</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"> NotificationDispatchService.java:405 * deliberately spends outside a transaction. A lease can expire during it, another wor</tspan><tspan x="24" dy="22">ker can</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"> NotificationDispatchService.java:406 * claim the job, and this worker can then wake up and describe an attempt that is no l</tspan><tspan x="24" dy="22">onger the</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"> NotificationDispatchService.java:407 * live one. The fenced variants make that write match nothing rather than win.</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"> NotificationDispatchService.java:408 *</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"> NotificationDispatchService.java:409 * <p>Losing the lease is not an error to report. The new holder owns the job and will </tspan><tspan x="24" dy="22">record its</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"> NotificationDispatchService.java:410 * own outcome; this worker's only remaining obligation is to stop.</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"> NotificationDispatchService.java:411 */</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"> NotificationDispatchService.java:412 private void applyNextAction(</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"></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"> NotificationDispatchService.java:417 RecipientLease lease) {</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"> NotificationDispatchService.java:418 transactions.inWrite(</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"> NotificationDispatchService.java:419 () -> {</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"> NotificationDispatchService.java:420 switch (decision) {</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"> NotificationDispatchService.java:421 case RetryDecision.RetryAfter retry -></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"> NotificationDispatchService.java:422 recipients.transitionHeldBy(</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"> NotificationDispatchService.java:423 work.recipient().id(),</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"> NotificationDispatchService.java:424 RecipientDeliveryState.RETRY_WAITING,</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"> NotificationDispatchService.java:425 Optional.of(now.plus(retry.delay())),</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"> NotificationDispatchService.java:426 lease);</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"> NotificationDispatchService.java:427 case RetryDecision.Reconcile reconcile -></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"> NotificationDispatchService.java:428 recipients.transitionHeldBy(</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"> NotificationDispatchService.java:429 work.recipient().id(),</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"> NotificationDispatchService.java:430 RecipientDeliveryState.RECONCILIATION_REQUIRED,</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"> NotificationDispatchService.java:431 Optional.of(reconcile.at()),</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"> NotificationDispatchService.java:432 lease);</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"> NotificationDispatchService.java:433 case RetryDecision.Fallback ignored -></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"> NotificationDispatchService.java:434 recipients.saveHeldBy(advanceRoute(work.recipient(), now), lease);</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"> NotificationDispatchService.java:435 case RetryDecision.Stop ignored -></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"> NotificationDispatchService.java:436 recipients.transitionHeldBy(</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"> NotificationDispatchService.java:437 work.recipient().id(),</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"> NotificationDispatchService.java:438 attempt.submissionOutcome() == SubmissionOutcome.CONFIRMED_ACCEPTED</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"> NotificationDispatchService.java:439 ? RecipientDeliveryState.COMPLETED</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"> NotificationDispatchService.java:440 : RecipientDeliveryState.FAILED,</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"> NotificationDispatchService.java:441 Optional.empty(),</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"> NotificationDispatchService.java:442 lease);</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"> NotificationDispatchService.java:443 }</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"> NotificationDispatchService.java:444 refreshStatus(work);</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"> NotificationDispatchService.java:445 });</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"></tspan></text>
|
|
<text x="24" y="6722" 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="6744" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 파일명에 Fenc 나 Lease 가 든 시험 파일 : 11 개</tspan></text>
|
|
<text x="24" y="6766" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> DispatchOutcomeRecorder 를 이름에 가진 시험 파일 : 0 개</tspan></text>
|
|
<text x="24" y="6788" 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="6810" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> adapter/outbound/notification · test · LeaseRecoveryServiceTest.java:306 public Optional<RecipientDeliveryRecord> saveHeldB</tspan><tspan x="24" dy="22">y(</tspan></text>
|
|
<text x="24" y="6854" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> adapter/outbound/notification · test · LeaseRecoveryServiceTest.java:313 public Optional<RecipientDeliveryRecord> transitio</tspan><tspan x="24" dy="22">nHeldBy(</tspan></text>
|
|
<text x="24" y="6898" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> adapter/outbound/persistence-jpa · postgresqlIntegrationTest · PostgreSqlRecipientLeaseFencingIntegrationTest.java:93 .tran</tspan><tspan x="24" dy="22">sitionHeldBy(</tspan></text>
|
|
<text x="24" y="6942" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> adapter/outbound/persistence-jpa · postgresqlIntegrationTest · PostgreSqlRecipientLeaseFencingIntegrationTest.java:127 .tra</tspan><tspan x="24" dy="22">nsitionHeldBy(</tspan></text>
|
|
<text x="24" y="6986" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> application-core · test · PlatformFakes.java:263 public Optional<RecipientDeliveryRecord> saveHeldBy(</tspan></text>
|
|
<text x="24" y="7008" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> application-core · test · PlatformFakes.java:272 public Optional<RecipientDeliveryRecord> transitionHeldBy(</tspan></text>
|
|
</svg>
|