MCPcopy Create free account
hub / github.com/GoogleCloudPlatform/cpp-samples / main

Function main

gcs-fast-transfers/upload.cc:39–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37} // namespace
38
39int main(int argc, char* argv[]) try {
40 auto vm = parse_command_line(argc, argv);
41 auto const bucket = vm["bucket"].as<std::string>();
42 auto const object = vm["object"].as<std::string>();
43 auto const source = vm["source"].as<std::string>();
44
45 auto client = gcs::Client::CreateDefaultClient().value();
46
47 std::cout << "Uploading " << source << " to bucket " << bucket
48 << " as object " << object << " ..." << std::flush;
49
50 auto const start = std::chrono::steady_clock::now();
51 auto const scratch_prefix =
52 boost::uuids::to_string(boost::uuids::random_generator_mt19937{}());
53 auto metadata =
54 gcs::ParallelUploadFile(
55 client, source, bucket, object, scratch_prefix, true,
56 gcs::MaxStreams(vm["max-streams"].as<int>()),
57 gcs::MinStreamSize(vm["minimum-stream-size"].as<std::int64_t>()))
58 .value();
59 auto const end = std::chrono::steady_clock::now();
60
61 std::cout << "DONE"
62 << "\n";
63 std::cout << "The upload was successful, the object size is approximately "
64 << format_size(metadata.size()) << "\n";
65
66 auto const elapsed_us =
67 std::chrono::duration_cast<std::chrono::microseconds>(end - start);
68 auto const elapsed_ms =
69 std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
70 auto const effective_bandwidth_MiBs =
71 (static_cast<double>(metadata.size()) / kMiB) /
72 (elapsed_us.count() / 1'000'000.0);
73 std::cout << "Upload completed in " << elapsed_ms.count() << "ms\n"
74 << "Effective bandwidth " << effective_bandwidth_MiBs << " MiB/s\n";
75
76 auto [size, crc32c] = file_info(source);
77 if (size != metadata.size()) {
78 std::cout << "Uploaded file size mismatch, expected=" << metadata.size()
79 << ", got=" << size << std::endl;
80 return 1;
81 }
82
83 if (crc32c != metadata.crc32c()) {
84 std::cout << "Download file CRC32C mismatch, expected=" << metadata.crc32c()
85 << ", got=" << crc32c << std::endl;
86 return 1;
87 }
88
89 std::cout << "File size and CRC32C match expected values" << std::endl;
90
91 return 0;
92} catch (std::exception const& ex) {
93 std::cerr << "Standard C++ exception thrown: " << ex.what() << std::endl;
94 return 1;
95} catch (...) {
96 std::cerr << "Unknown C++ exception thrown" << std::endl;

Callers

nothing calls this directly

Calls 3

format_sizeFunction · 0.85
file_infoFunction · 0.85
parse_command_lineFunction · 0.70

Tested by

no test coverage detected