in e2e-examples/gcs/benchmark/gcscpp_runner.cc [123:155]
bool GcscppRunner::DoRead(int thread_id,
google::cloud::storage::Client storage_client) {
std::vector<char> buffer(4 * 1024 * 1024);
auto const buffer_size = static_cast<std::streamsize>(buffer.size());
for (int run = 0; run < parameters_.runs; run++) {
std::string object = object_resolver_.Resolve(thread_id, run);
absl::Time run_start = absl::Now();
auto reader = storage_client.ReadObject(parameters_.bucket, object);
if (!reader) {
std::cerr << "Error reading object: " << reader.status() << "\n";
return false;
}
int64_t total_bytes = 0;
std::vector<RunnerWatcher::Chunk> chunks;
chunks.reserve(256);
while (!reader.eof()) {
reader.read(buffer.data(), buffer_size);
int64_t content_size = reader.gcount();
RunnerWatcher::Chunk chunk = {absl::Now(), content_size};
chunks.push_back(chunk);
total_bytes += content_size;
}
reader.Close();
absl::Time run_end = absl::Now();
watcher_->NotifyCompleted(OperationType::Read, thread_id, 0,
ExtractPeer(reader.headers()), parameters_.bucket,
object, grpc::Status::OK, total_bytes, run_start,
run_end - run_start, chunks);
}
return true;
}