• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hyperledger / fabric-x-orderer / 39721047803
85%

Build:
DEFAULT BRANCH: main
Ran 22 Oct 2026 06:28AM UTC
Jobs 1
Files 217
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

21 Oct 2026 02:43PM UTC coverage: 84.658% (+0.06%) from 84.597%
39721047803

push

github

web-flow
request: store the payload before publishing the id in tryInsert (#1260) (#1320)

* request: store the payload before publishing the id in tryInsert (#1260)

tryInsert published reqID2Bucket[reqID] before storing the payload, so a
concurrent removeRequest in that window found the live bucket, missed the
payload, and neither removed nor tombstoned the request. Submit then stored
it and returned nil, leaving a removed request pooled with its permit.

Store the payload and size first and publish the id last, rolling back if
the id is already known (held or tombstoned).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Hagar Meir <hagar.meir@ibm.com>

* request: decide pending-store request ownership through the id entry (#1260)

The previous commit stored the payload before publishing the id, but its
rollback could still be reached through a stale id entry that pointed at
the same bucket while a concurrent delete was in progress. A second
remover then deleted the rolled-back payload, so OnDelete ran twice (one
permit released too many) and the bucket size underflowed.

Make the reqID2Bucket entry the only place where ownership is decided:
- removeRequest swaps in a tombstone, and only the caller that swaps out
  a live bucket deletes the payload and calls OnDelete. Removing a held
  request now tombstones it as well, so a late redelivery of a processed
  request is rejected instead of being pooled again.
- Prune erases the id with CompareAndDelete(id, b) before deleting, which
  keeps resubmission after a prune possible.
- bucket.delete only removes the payload and decrements size.
- tryInsert rejects already-known ids before touching the bucket.
- garbageCollectProcessed uses CompareAndDelete so it cannot drop a
  tombstone that a later removal replaced.

The race test now runs NumCPU concurrent submits and removals per trial
and checks that accepted submits and OnDelete calls match.

Co-Authored-By: Claude Opus 5.5 (1... (continued)

19 of 19 new or added lines in 2 files covered. (100.0%)

39 existing lines in 6 files now uncovered.

18392 of 21725 relevant lines covered (84.66%)

50214.96 hits per line

Coverage Regressions

Lines Coverage ∆ File
24
94.81
0.26% node/consensus/state/state.go
5
83.16
-2.55% node/delivery/deliver_client.go
5
91.27
-2.18% request/pool.go
2
83.94
0.49% common/ledger/blkstorage/blockfile_mgr.go
2
86.67
-1.48% common/tools/armageddon/broadcast_client.go
1
83.46
-0.19% node/batcher/batcher.go
Jobs
ID Job ID Ran Files Coverage
1 39721047803.1 22 Oct 2026 06:28AM UTC 217
84.66
GitHub Action Run
Source Files on build 39721047803
  • Tree
  • List 217
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • f1fc6626 on github
  • Prev Build on main (#39542792409)
  • Next Build on main (#39899064375)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc