Sdms-977 !!better!! <TESTED · Manual>

// 3. Update metadata in a DB transaction transaction // lock row for update val meta = metadataDao.findForUpdate(request.objectId) meta.tier = request.targetTier meta.lastTierChangeTs = Instant.now() metadataDao.update(meta)

// 1. Stream copy (multipart, server‑side if supported) val copyResult = dst.copyObjectFrom(src, request.objectKey) sdms-977

// 2. Verify checksum if (copyResult.checksum != request.expectedChecksum) auditFail(request, "checksum mismatch") throw MigrationException("Checksum verification failed") sdms-977

Total estimated effort: (≈ 6 full‑time developers + 2 QA + 1 Ops). 7. Testing Strategy | Test Level | Scope | Tools | |------------|-------|-------| | **Unit sdms-977

// 4. Delete source (if policy permits) if (request.deleteSource) src.deleteObject(request.objectKey)

auditSuccess(request)