| 1744 | } |
| 1745 | |
| 1746 | Status Abort() override { |
| 1747 | if (closed_) { |
| 1748 | return Status::OK(); |
| 1749 | } |
| 1750 | |
| 1751 | if (IsMultipartCreated()) { |
| 1752 | ARROW_ASSIGN_OR_RAISE(auto client_lock, holder_->Lock()); |
| 1753 | |
| 1754 | S3Model::AbortMultipartUploadRequest req; |
| 1755 | req.SetBucket(ToAwsString(path_.bucket)); |
| 1756 | req.SetKey(ToAwsString(path_.key)); |
| 1757 | req.SetUploadId(multipart_upload_id_); |
| 1758 | |
| 1759 | auto outcome = client_lock.Move()->AbortMultipartUpload(req); |
| 1760 | if (!outcome.IsSuccess()) { |
| 1761 | return ErrorToStatus( |
| 1762 | std::forward_as_tuple("When aborting multiple part upload for key '", |
| 1763 | path_.key, "' in bucket '", path_.bucket, "': "), |
| 1764 | "AbortMultipartUpload", outcome.GetError()); |
| 1765 | } |
| 1766 | } |
| 1767 | |
| 1768 | current_part_.reset(); |
| 1769 | holder_ = nullptr; |
| 1770 | closed_ = true; |
| 1771 | |
| 1772 | return Status::OK(); |
| 1773 | } |
| 1774 | |
| 1775 | // OutputStream interface |
| 1776 | |