84 const std::shared_ptr<Aws::S3::S3Client>& s3Client,
86 bool doConsistencyChecks);
91 const std::shared_ptr<Aws::S3::S3Client>& s3Client,
93 bool doConsistencyChecks);
99 const std::shared_ptr<Aws::S3::S3Client>& s3Client,
101 bool doConsistencyChecks);
105 uint32_t GetPartCount()
const;
108 size_t GetCompletedPartCount()
const;
114 bool DoneWithRequests()
const;
117 bool IsSinglePartUpload()
const;
121 bool AllPartsReturned()
const;
124 uint32_t GetPartsRemaining()
const;
126 size_t GetPendingParts()
const;
132 size_t GetResourcesInUse()
const;
135 uint32_t GetPartsReturned()
const;
137 uint32_t GetTotalPartRetries()
const;
149 virtual bool DoCancelAction()
override;
150 virtual void SetDone()
override;
153 bool ProcessBuffer(
const std::shared_ptr<UploadBuffer>& buffer);
155 uint64_t ReadNextPart(
const std::shared_ptr<UploadBuffer>& buffer, std::shared_ptr<Aws::IOStream>& streamBuf, uint32_t& partNum);
158 void CompleteUpload();
162 bool ContinueUpload();
165 void DoConsistencyChecks();
168 void CheckConsistencyCompletion();
170 void CheckGetObject();
171 void CheckHeadObject();
172 void CheckListObjects();
175 bool WaitForBucketToPropagate();
176 bool CreateMultipartUpload();
177 virtual bool IsReady()
const override;
179 bool HasUploadId()
const;
180 const Aws::String& GetUploadId()
const {
return m_uploadId; }
182 void CreateStreamBuffer(std::shared_ptr<Aws::IOStream>& streamBuf)
const;
186 bool RequestPart(uint32_t partId);
192 void SingleUploadComplete();
221 void AddReadyBuffer(std::shared_ptr<UploadBuffer> buffer);
222 bool GetReadyBuffer(std::shared_ptr<UploadBuffer>& buffer);
223 bool ProcessAvailableBuffers();
227 bool DoSingleObjectUpload(std::shared_ptr<Aws::IOStream>& streamBuf, uint64_t bytesRead);
231 bool IsUsingBuffer(
const std::shared_ptr<UploadBuffer>& buffer)
const;
233 void CheckReacquireBuffers();
235 void ReleaseResources();
237 void SetResourceSet(std::shared_ptr<UploadBufferScopedResourceSetType>& bufferSet);
239 std::shared_ptr<UploadBufferScopedResourceSetType > m_resources;
241 mutable std::mutex m_fileRequestMutex;
243 std::mutex m_resourceMutex;
244 std::mutex m_completePartMutex;
245 std::mutex m_reuseMutex;
246 mutable std::mutex m_pendingMutex;
247 std::mutex m_bufferMutex;
249 uint64_t m_bytesRemaining;
251 std::atomic<uint32_t> m_partCount;
252 std::atomic<uint32_t> m_partsReturned;
253 std::atomic<uint32_t> m_totalPartRetries;
255 std::atomic<bool> m_createBucket;
256 std::atomic<bool> m_createBucketPending;
257 std::atomic<bool> m_bucketCreated;
258 std::atomic<bool> m_createMultipartUploadPending;
259 std::atomic<bool> m_headBucketPending;
260 std::atomic<bool> m_completeMultipartUploadPending;
262 bool m_bucketPropagated;
264 uint32_t m_totalParts;
276 uint32_t m_createMultipartRetries;
277 uint32_t m_createBucketRetries;
278 uint32_t m_completeRetries;
279 uint32_t m_singleRetry;
280 bool m_doConsistencyChecks;
283 std::atomic<bool> m_sentConsistencyChecks;
284 std::atomic<bool> m_headObjectPassed;
285 std::atomic<bool> m_getObjectPassed;
286 std::atomic<bool> m_listObjectsPassed;
288 unsigned m_headObjectRetries;
289 unsigned m_getObjectRetries;
290 unsigned m_listObjectsRetries;
291 unsigned m_headBucketRetries;
Aws::Utils::ByteBuffer m_partMd5
uint32_t GetTotalParts() const
std::map< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > > Map
std::basic_ifstream< char, std::char_traits< char > > IFStream
std::shared_ptr< UploadBuffer > m_buffer
PartRequestRecord(const std::shared_ptr< UploadBuffer > &thisBuffer)
bool HasPassedGetObject() const
bool HasPassedHeadObject() const
std::list< T, Aws::Allocator< T > > List
Aws::S3::Model::UploadPartRequest m_partRequest
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
bool HasPassedListObjects() const
bool HasSentConsistencyChecks() const
JSON (JavaScript Object Notation).