[ 
https://issues.apache.org/jira/browse/HDDS-16469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18125924#comment-18125924
 ] 

Siyao Meng commented on HDDS-16469:
-----------------------------------

Follow up: the 13 code review candidates that the first run left unjudged 
(CR-2, CR-4, CR-5 and CR-7 to CR-16) have now each been investigated against 
the pinned commit. This supersedes the "Not judged" section of the result 
comment above.

h3. Run environment
{noformat}
Ozone commit: 20e6a1c0f6039248373efd3eb1d7f2afcf7f1535 (unmodified, no trace 
instrumentation)
Specula:      v1.2.0 with local changes
Agent/model:  claude-code, Claude Opus 5.5 (1M context)
Effort:       medium
Scope:        bug confirmation and severity classification for these 13 
candidates only
Total:        about 1h agent time, about $19 (estimate)
{noformat}
The candidate records were recovered unchanged from the first consolidation 
pass, so no fresh consolidation was needed.

h3. Result
||Disposition||Count||
|Reproduced|0|
|False positive|11|
|Dropped, already reported|2|

No new issue is filed from these 13. Final count for this subtask: 20 
candidates, 5 reproduced (HDDS-16732 to HDDS-16736), 13 false positive, 2 
dropped as already reported.

h3. Dispositions
||Candidate||Claim||Disposition||
|CR-2|The open time and commit time checks report the same race with different 
result codes|False positive. The split is the S3 contract added on purpose by 
HDDS-14968: 412 when the condition is false when evaluated, 409 when a 
conflicting write lands during the upload. Existing tests assert both sides.|
|CR-4|{{CreateFile}} ignores {{expectedETag}}|False positive. True on the OM 
side, but the client side translator never sends the field on {{CreateFile}}, 
so it takes a hand built request.|
|CR-5|FSO bulk delete enforces no condition|False positive. 
{{OmKeysDeleteRequestWithFSO}} inherits the {{updateIDs}} check of 
{{OMKeysDeleteRequest}}. Stale IDs were rejected per key and nothing was 
deleted.|
|CR-7|A key listed twice in one {{DeleteKeys}} request releases quota 
twice|Dropped, already reported as HDDS-16773.|
|CR-8|A zero length commit does not enqueue its preallocated blocks|False 
positive. Deliberate since HDDS-14417. A mini cluster run found no datanode 
trace of those blocks and no bucket usage.|
|CR-9|{{filterOutBlocksStillInUse}} can throw {{IllegalStateException}} on a 
repeated block|False positive. No sequence was found that puts a repeated block 
into the key (create, allocate and commit were run, hsync and lease recovery 
were read). The exception fired only on a hand built open key.|
|CR-10|FSO commit rebuilds the key info before {{validateAtomicRewrite}}, the 
reverse of the non FSO order|False positive. The work before the check is on a 
request private copy. After a rejected commit the open key, the winner's key, 
bucket usage and {{deletedTable}} were unchanged, same as non FSO.|
|CR-11|MPU complete reads the key table inline, not through the FSO 
accessor|False positive. The inline read already uses the FSO key and the file 
table. Six conditional cases on an FSO bucket returned the correct result.|
|CR-12|{{createKeyIfNotExists}} gates on {{ATOMIC_REWRITE_KEY}}, not 
{{ATOMIC_CREATE_IF_NOT_EXISTS}}|Dropped, already reported in HDDS-16734 
(suggested fix, item 3).|
|CR-13|A metadata only write fails an in flight conditional commit|False 
positive. Documented design ({{overwrite-key-only-if-unchanged.md}}). The 
conflict is retryable, and it keeps a concurrent ACL change from being lost.|
|CR-14|The old sentinel name {{EXPECTED_GEN_CREATE_IF_NOT_EXISTS}} is left 
behind|False positive as a bug. Comments, Javadoc and one design doc line only.|
|CR-15|Removed {{KeyInfo}} field 23 is not reserved|False positive as a bug. 
The field was added and removed within the 2.2.0 cycle, no release wrote it and 
nothing reads it.|
|CR-16|The {{setExpectedDataGeneration(null)}} scrub in both commit paths is 
redundant|False positive. The scrub is still what clears the field on the key 
table cache entry. Only the comments differ.|

h3. Possible cleanups seen on the way
None of these is a bug at this commit, so none is filed.
* {{OMFileCreateRequest.preExecute}} could reject a request that carries 
{{expectedETag}} or {{expectedDataGeneration}} (CR-4).
* The {{Collectors.toMap}} in {{filterOutBlocksStillInUse}} could take a merge 
function, so a future change to block grouping cannot turn into an OM shutdown 
(CR-9).
* {{KeyInfo}} could declare {{reserved 23}} (CR-15).
* {{testUpdateIDCountMatchKeyCount}} in {{TestOMKeysDeleteRequest}} and 
{{TestOMKeysDeleteRequestWithFSO}} builds an empty {{updateIDs}} list, so it 
never exercises the check (CR-5).
* {{s3-conditional-requests.md}} still says a commit time mismatch returns 
{{KEY_NOT_FOUND}}. Since HDDS-14968 it returns {{ATOMIC_WRITE_CONFLICT}} (CR-2).

h3. Caveats
* All 13 ended with the investigator dismissing the candidate, and the 
Challenger debate opens only for a candidate the investigator upholds, so none 
of the 13 went through a debate round.
* The two dropped candidates were not reproduced again here. Their 
reproductions are on the issues that already track them.
* CR-2 and CR-10 needed a second attempt because the first ended before its 
build finished.

Generated with Specula (Claude Opus 5.5).

> [Specula] Verify om-conditional-key (Apache Ozone master @20e6a1c)
> ------------------------------------------------------------------
>
>                 Key: HDDS-16469
>                 URL: https://issues.apache.org/jira/browse/HDDS-16469
>             Project: Apache Ozone
>          Issue Type: Sub-task
>            Reporter: Siyao Meng
>            Assignee: Siyao Meng
>            Priority: Minor
>              Labels: help-wanted, specula
>         Attachments: om-conditional-key.guidance.md
>
>
> This is a runnable Apache Ozone formal-verification target for the Specula 
> pipeline (TLA+ model checking plus trace validation against the real code). 
> It has not been run yet. Anyone can pick it up: run Specula against the 
> pinned commit, then report findings on this issue. Part of umbrella 
> HDDS-15926.
> h3. Target
> {{om-conditional-key}}. Scope and code entry points are in the attached 
> guidance file [^om-conditional-key.guidance.md].
> h3. Run environment
> {noformat}
> Apache Ozone commit: 20e6a1c0f6039248373efd3eb1d7f2afcf7f1535
> Specula:             https://github.com/specula-org/Specula (v1.1.0 or later)
> Toolchain:           JDK 21, ~28 GB RAM for TLC, an LLM coding agent 
> (claude-code or codex adapter)
> Runtime:             hours per target; needs an agent API budget
> {noformat}
> h3. How to run
> # Clone Specula and install per its README; clone apache/ozone and check out 
> the pinned commit above.
> # Place the attached guidance file as the target's .prompt-extra.md (see the 
> Specula README for target layout).
> # Run:
> {code:none}
> specula run --agent=claude-code --effort=medium --keep-original 
> --max-parallel=2 \
>   --enable-reviews --confirm-debate --tlc-memory-limit=28G 
> --tlc-worker-limit=8 \
>   "om-conditional-key|apache/ozone|Java|Use the target-specific 
> .prompt-extra.md"
> {code}
> # Deliverables land under the run's {{.specula-output/}}: 
> {{confirmed-bugs.md}}, {{bug-severity.md}}, {{summary.md}}, and 
> {{confirmation/<id>/investigation.md}}.
> h3. Reporting results
> Comment here with the outcome (0 findings is still useful: it records the 
> target as covered at this commit). For each confirmed bug, file a separate 
> Ozone Bug and link it to this issue with the "Testing" link type ("Testing 
> discovered").
> h3. Notes
> * Code entry-point line numbers in the guidance were captured at an earlier 
> commit and may have shifted on this head; treat them as approximate. Specula 
> re-analyzes the source, so the run does not depend on them.
> * Recon-building targets need a local Specula patch to skip Maven {{target/}} 
> out-of-tree symlinks in {{snapshotlib._validate_source_tree}}, else the run 
> crashes at finalize.
> * effort=medium is the tested default for large targets; effort=high can hit 
> per-turn timeouts on the biggest ones.
> * Findings are proposals, to be confirmed by human review and testing before 
> any fix is merged.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to