HesandaLiyanage commented on PR #3193:
URL: https://github.com/apache/james-project/pull/3193#issuecomment-5755563513
Hi @Arsnael,
Thank you very much for the review and guidance!
### 1. CI Test Failures Fixed
The failures in `CassandraBlobIdRepairerIntegrationTest` were caused by an
overzealous loop guard in `ChunkedBlobStoreDAO.readChunkSlotWithRepair`. When
`blobIdRepairer.repair()` resolved a corrupted slot reference to its canonical
counterpart slot reference, the method rejected it because
`ChunkId.isChunkRef(repairedBlobId)` was true, re-throwing
`ObjectNotFoundException`.
- Updated `ChunkedBlobStoreDAO` to directly resolve repaired chunk slot
references without re-entering the repair loop, preserving loop protection only
when `repairedBlobId.equals(originalBlobId)`.
- Added unit test coverage
(`readChunkSlotShouldTriggerRepairWhenRepairedToAnotherSlotRef`) in
`ChunkedBlobStoreDAOTest`.
- Verified both `CassandraBlobIdRepairerIntegrationTest` and
`CassandraBlobIdUpdaterIntegrationTest` pass locally against Cassandra
testcontainers.
### 2. Broken Down Into 6 Logical Step Commits
I have restructured the work from a single monolithic commit into 6 focused,
incremental commits:
1. **Commit 1 (`eadb532d`):** `JAMES-4231 ADR: Architecture Decision Record
for S3 Object Compaction`
- Documents the architectural context, chunk binary layout, Zstd per-slot
compression, crash-safety guarantees, and Bloom filter GC invariants.
2. **Commit 2 (`c3a6b84c`):** `JAMES-4231 Blob API: Add range read contract
and ChunkMarker support`
- Adds `BlobStoreDAO.readRange` API contract, `RangeByteSlice`, and
`ChunkMarker` discriminator.
3. **Commit 3 (`366bcd22`):** `JAMES-4231 S3 BlobStore: Implement byte range
reads for S3BlobStoreDAO`
- Implements S3 HTTP range requests with S3 416
(`RequestedRangeNotSatisfiable`) handling, contract tests, and MinIO
integration tests.
4. **Commit 4 (`fa6091bd`):** `JAMES-4231 Storage Strategy: Exclude
compacted chunks in BloomFilter GC`
- Updates `BloomFilterGCAlgorithm` to safely ignore compacted chunk
objects during GC sweeps.
5. **Commit 5 (`6413283e`):** `JAMES-4231 Compaction Engine: Add chunk
format, ChunkedBlobStoreDAO, and compaction tasks`
- Implements `ChunkFormat`, `ChunkId`, `ChunkedBlobStoreDAO`, windowed
candidate streaming `BlobCompactionAlgorithm`, `BlobCompactionTask`, and unit
test suite (48 tests).
6. **Commit 6 (`71d52345`):** `JAMES-4231 Cassandra & WebAdmin: Add metadata
updater/repairer and WebAdmin API`
- Implements Cassandra reference mapping, updater, and self-healing
repairer; wires `BlobCompactionModule` in Guice; exposes `DELETE
/blobs?scope=compaction` in WebAdmin.
Please let me know if you would like any further adjustments!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]