| 1685 | } |
| 1686 | |
| 1687 | Status Abort() override { |
| 1688 | if (closed_) { |
| 1689 | return Status::OK(); |
| 1690 | } |
| 1691 | |
| 1692 | if (IsMultipartCreated()) { |
| 1693 | ARROW_ASSIGN_OR_RAISE(auto client_lock, holder_->Lock()); |
| 1694 | |
| 1695 | S3Model::AbortMultipartUploadRequest req; |
| 1696 | req.SetBucket(ToAwsString(path_.bucket)); |
| 1697 | req.SetKey(ToAwsString(path_.key)); |
| 1698 | req.SetUploadId(multipart_upload_id_); |
| 1699 | |
| 1700 | auto outcome = client_lock.Move()->AbortMultipartUpload(req); |
| 1701 | if (!outcome.IsSuccess()) { |
| 1702 | return ErrorToStatus( |
| 1703 | std::forward_as_tuple("When aborting multiple part upload for key '", |
| 1704 | path_.key, "' in bucket '", path_.bucket, "': "), |
| 1705 | "AbortMultipartUpload", outcome.GetError()); |
| 1706 | } |
| 1707 | } |
| 1708 | |
| 1709 | current_part_.reset(); |
| 1710 | holder_ = nullptr; |
| 1711 | closed_ = true; |
| 1712 | |
| 1713 | return Status::OK(); |
| 1714 | } |
| 1715 | |
| 1716 | // OutputStream interface |
| 1717 | |