bool GcscppRunner::DoRead()

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;
}