void S3KeyReader::open(const S3Params& params) { S3_CHECK_OR_DIE(this->s3Interface != NULL, S3RuntimeError, "s3Interface must not be NULL"); this->sharedError = false; this->numOfChunks = params.getNumOfChunks(); S3_CHECK_OR_DIE(this->numOfChunks > 0, S3RuntimeError, "numOfChunks must not be zero"); this->offsetMgr.setKeySize(params.getKeySize()); this->offsetMgr.setChunkSize(params.getChunkSize()); S3_CHECK_OR_DIE(params.getChunkSize() > 0, S3RuntimeError, "chunk size must be greater than zero"); this->chunkBuffers.reserve(this->numOfChunks); for (uint64_t i = 0; i < this->numOfChunks; i++) { this->chunkBuffers.emplace_back(params.getS3Url(), *this, params.getMemoryContext()); } for (uint64_t i = 0; i < this->numOfChunks; i++) { this->chunkBuffers[i].setS3InterfaceService(this->s3Interface); pthread_t thread; pthread_create(&thread, NULL, DownloadThreadFunc, &this->chunkBuffers[i]); this->threads.push_back(thread); } }
S3Params S3BucketReader::constructReaderParams(BucketContent& key) { // encode the key name but leave the "/" // "/encoded_path/encoded_name" string keyEncoded = UriEncode(key.getName()); FindAndReplace(keyEncoded, "%2F", "/"); S3Params readerParams = this->params.setPrefix(keyEncoded); readerParams.setKeySize(key.getSize()); S3DEBUG("key: %s, size: %" PRIu64, readerParams.getS3Url().getFullUrlForCurl().c_str(), readerParams.getKeySize()); return readerParams; }
S3Params S3BucketReader::constructReaderParams(BucketContent& key) { S3Params readerParams = this->params; // encode the key name but leave the "/" // "/encoded_path/encoded_name" string keyEncoded = uri_encode(key.getName()); find_replace(keyEncoded, "%2F", "/"); readerParams.setKeyUrl(this->getKeyURL(keyEncoded)); readerParams.setRegion(this->region); readerParams.setKeySize(key.getSize()); S3DEBUG("key: %s, size: %" PRIu64, readerParams.getKeyUrl().c_str(), readerParams.getKeySize()); return readerParams; }