Add a new backend store that enables iSCSI targets backed by
S3-compatible object storage (AWS S3, MinIO, Ceph RGW, etc.).
The implementation uses a chunked storage strategy where the virtual
block device is divided into fixed-size chunks (default 4 MiB), each
stored as an independent S3 object. This enables efficient random
read/write access on top of object storage.
Key features:
- Chunked storage with configurable chunk size
- Sparse device support (unwritten chunks treated as zeros)
- Concurrent multi-chunk I/O via errgroup
- Per-chunk locking for safe read-modify-write
- AWS SDK v2 with default credential chain
- In-process gofakes3 test server (no Docker needed)
- 12 unit tests + 2 integration tests
Also updates CI workflow to run S3 backend tests and updates
README with S3 backend documentation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Go's json.Encode outputs null for nil slices. Handle both null and
empty array in the LU removal verification.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The SCSILu.Path field is not populated during LU creation, so grep
for the file path won't work. Use python3 JSON validation to check
the array length instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The gotgt CLI client prepends /v{version}/ to API paths, but when built
from untagged commits the version is a git SHA that doesn't match the
server's version route regex. Use curl to hit the API directly instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a new "CLI management test" step to the CI pipeline that exercises
the full lifecycle of the new management commands against a running
daemon:
- list target / list lu / list tpgt (read existing config)
- create target -> verify in list
- create lu -> verify in list
- rm lu -> verify removed
- rm target -> verify removed
Each step validates output with grep assertions so failures are
immediately visible.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The OneCommand test expects CDB usage data in REPORT_SUPPORTED_OPCODES
response which is not fully implemented yet.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These tests cause gotgt to hang in CI when the command triggers
an unexpected write-path state. Keep ReadDefectData tests which
are read-only and confirmed working.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>