Skip to content

Commit be32f54

Browse files
committed
resolving comments
1 parent 1573e64 commit be32f54

1 file changed

Lines changed: 45 additions & 33 deletions

File tree

google/cloud/storage/examples/storage_async_samples.cc

Lines changed: 45 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ void OpenObjectMultipleRangedRead(
207207
//! [open-object-multiple-ranged-read]
208208
// [START storage_open_object_multiple_ranged_read]
209209
namespace gcs_ex = google::cloud::storage_experimental;
210-
// Helper coroutine, count lines returned by a AsyncReader
210+
211+
// Helper coroutine to count newlines returned by an AsyncReader.
211212
auto count_newlines =
212213
[](gcs_ex::AsyncReader reader,
213214
gcs_ex::AsyncToken token) -> google::cloud::future<std::uint64_t> {
@@ -294,11 +295,11 @@ void OpenObjectReadFullObject(
294295
std::cout << "The range contains " << count << " newlines\n";
295296
}
296297

297-
void OpenMultipleObjectRangedRead(
298+
void OpenMultipleObjectsRangedRead(
298299
google::cloud::storage_experimental::AsyncClient& client,
299300
std::vector<std::string> const& argv) {
300-
//! [open-multiple-object-ranged-read]
301-
// [START storage_open_multiple_object_ranged_read]
301+
//! [open-multiple-objects-ranged-read]
302+
// [START storage_open_multiple_objects_ranged_read]
302303
namespace gcs_ex = google::cloud::storage_experimental;
303304

304305
// Helper coroutine to count newlines returned by an AsyncReader.
@@ -315,6 +316,7 @@ void OpenMultipleObjectRangedRead(
315316
}
316317
co_return count;
317318
};
319+
318320
auto coro = [&count_newlines](
319321
gcs_ex::AsyncClient& client, std::string bucket_name,
320322
std::string object_name1, std::string object_name2,
@@ -333,15 +335,28 @@ void OpenMultipleObjectRangedRead(
333335
futures.push_back(count_newlines(std::move(reader), std::move(token)));
334336
}
335337

336-
// Wait for all futures and print results
337-
for (std::size_t i = 0; i < futures.size(); ++i) {
338-
auto count = futures[i].get();
339-
std::cout << "Object " << object_names[i] << " read returned " << count
340-
<< " newlines\n";
338+
// Process futures as they become ready and print results
339+
while (!futures.empty()) {
340+
bool progress_made = false;
341+
for (std::size_t i = 0; i < futures.size(); ++i) {
342+
if (futures[i].is_ready()) { // Check if the future is ready
343+
auto count = futures[i].get();
344+
std::cout << "Object " << object_names[i] << " read returned "
345+
<< count << " newlines\n";
346+
futures.erase(futures.begin() + i);
347+
object_names.erase(object_names.begin() + i);
348+
progress_made = true;
349+
break; // Restart the loop after modifying the vectors
350+
}
351+
}
352+
if (!progress_made) {
353+
std::this_thread::sleep_for(
354+
std::chrono::milliseconds(10)); // Avoid busy spin
355+
}
341356
}
342357
};
343-
// [END storage_open_multiple_object_ranged_read]
344-
//! [open-multiple-object-ranged-read]
358+
// [END storage_open_multiple_objects_ranged_read]
359+
//! [open-multiple-objects-ranged-read]
345360
coro(client, argv.at(0), argv.at(1), argv.at(2), argv.at(3)).get();
346361
}
347362

@@ -702,8 +717,7 @@ void CreateAndWriteAppendableObject(
702717
gcs_ex::BucketName(std::move(bucket_name)),
703718
std::move(object_name)))
704719
.value();
705-
std::cout << "Appendable upload started for object " << object_name
706-
<< " with upload id " << writer.UploadId() << "\n";
720+
std::cout << "Appendable upload started for object " << object_name "\n";
707721

708722
token = (co_await writer.Write(std::move(token),
709723
gcs_ex::WritePayload("Some data\n")))
@@ -726,7 +740,7 @@ void CreateAndWriteAppendableObject(
726740
std::cout << "Wrote more data.\n";
727741

728742
// Finalize the upload to make it a regular object.
729-
co_await writer.Finalize(std::move(token))).value();
743+
co_return (co_await writer.Finalize(std::move(token))).value();
730744
};
731745
// [END storage_create_and_write_appendable_object]
732746
//! [create-and-write-appendable-object]
@@ -750,8 +764,7 @@ void PauseAndResumeAppendableUpload(
750764
auto [writer, token] = (co_await client.StartAppendableObjectUpload(
751765
gcs_ex::BucketName(bucket_name), object_name))
752766
.value();
753-
std::cout << "Appendable upload started with upload id "
754-
<< writer.UploadId() << "\n";
767+
std::cout << "Appendable upload started.\n";
755768
token = (co_await writer.Write(std::move(token),
756769
gcs_ex::WritePayload("paused data\n")))
757770
.value();
@@ -808,8 +821,7 @@ void FinalizeAppendableObjectUpload(
808821
gcs_ex::BucketName(std::move(bucket_name)),
809822
std::move(object_name)))
810823
.value();
811-
std::cout << "Appendable upload started with upload id "
812-
<< writer.UploadId() << "\n";
824+
std::cout << "Appendable upload started. \n";
813825

814826
// Write some data.
815827
token =
@@ -829,10 +841,10 @@ void FinalizeAppendableObjectUpload(
829841
std::cout << "Finalized object: " << object.DebugString() << "\n";
830842
}
831843

832-
void ReadObjectTail(google::cloud::storage_experimental::AsyncClient& client,
844+
void ReadAppendableObjectTail(google::cloud::storage_experimental::AsyncClient& client,
833845
std::vector<std::string> const& argv) {
834-
//! [read-object-tail]
835-
// [START storage_read_object_tail]
846+
//! [read-appendable-object-tail]
847+
// [START storage_read_appendable_object_tail]
836848
namespace gcs = google::cloud::storage;
837849
namespace gcs_ex = google::cloud::storage_experimental;
838850
auto coro = [](gcs_ex::AsyncClient& client, std::string bucket_name,
@@ -872,8 +884,8 @@ void ReadObjectTail(google::cloud::storage_experimental::AsyncClient& client,
872884
co_await google::cloud::sleep_for(std::chrono::seconds(1));
873885
}
874886
};
875-
// [END storage_read_object_tail]
876-
//! [read-object-tail]
887+
// [END storage_read_appendable_object_tail]
888+
//! [read-appendable-object-tail]
877889
coro(client, argv.at(0), argv.at(1)).get();
878890
}
879891

@@ -978,7 +990,7 @@ void OpenObjectMultipleRangedRead(
978990
std::cerr << "AsyncClient::Open() example requires coroutines\n";
979991
}
980992

981-
void OpenMultipleObjectRangedRead(
993+
void OpenMultipleObjectsRangedRead(
982994
google::cloud::storage_experimental::AsyncClient&,
983995
std::vector<std::string> const&) {
984996
std::cerr << "AsyncClient::Open() example requires coroutines\n";
@@ -1071,9 +1083,9 @@ void FinalizeAppendableObjectUpload(
10711083
"coroutines\n";
10721084
}
10731085

1074-
void ReadObjectTail(google::cloud::storage_experimental::AsyncClient&,
1086+
void ReadAppendableObjectTail(google::cloud::storage_experimental::AsyncClient&,
10751087
std::vector<std::string> const&) {
1076-
std::cerr << "AsyncClient::ReadObjectTail() example requires coroutines\n";
1088+
std::cerr << "AsyncClient::ReadAppendableObjectTail() example requires coroutines\n";
10771089
}
10781090

10791091
void RewriteObject(google::cloud::storage_experimental::AsyncClient&,
@@ -1258,7 +1270,7 @@ void AutoRun(std::vector<std::string> const& argv) {
12581270
<< std::endl;
12591271
OpenObjectMultipleRangedRead(client, {bucket_name, composed_name});
12601272

1261-
std::cout << "Running the OpenMultipleObjectRangedRead() example"
1273+
std::cout << "Running the OpenMultipleObjectsRangedRead() example"
12621274
<< std::endl;
12631275
auto const multi_read_o1 =
12641276
examples::MakeRandomObjectName(generator, "object-");
@@ -1272,7 +1284,7 @@ void AutoRun(std::vector<std::string> const& argv) {
12721284
examples::MakeRandomObjectName(generator, "object-");
12731285
InsertObject(client, {bucket_name, multi_read_o3});
12741286
scheduled_for_delete.push_back(multi_read_o3);
1275-
OpenMultipleObjectRangedRead(
1287+
OpenMultipleObjectsRangedRead(
12761288
client, {bucket_name, multi_read_o1, multi_read_o2, multi_read_o3});
12771289
// The objects are already scheduled for deletion, no need to do it again.
12781290
// We also need a new object name for the next test.
@@ -1387,7 +1399,7 @@ void AutoRun(std::vector<std::string> const& argv) {
13871399
scheduled_for_delete.push_back(std::move(object_name));
13881400
object_name = examples::MakeRandomObjectName(generator, "object-");
13891401

1390-
std::cout << "Running ReadObjectTail() example" << std::endl;
1402+
std::cout << "Running ReadAppendableObjectTail() example" << std::endl;
13911403
// Create a dummy object for the tail example to read. In a real
13921404
// application another process would be writing to this object.
13931405
(void)client
@@ -1396,7 +1408,7 @@ void AutoRun(std::vector<std::string> const& argv) {
13961408
object_name, "content for tail example\n")
13971409
.get()
13981410
.value();
1399-
ReadObjectTail(client, {bucket_name, object_name});
1411+
ReadAppendableObjectTail(client, {bucket_name, object_name});
14001412
scheduled_for_delete.push_back(std::move(object_name));
14011413
object_name = examples::MakeRandomObjectName(generator, "object-");
14021414
}
@@ -1481,9 +1493,9 @@ int main(int argc, char* argv[]) try {
14811493
make_entry("open-object-multiple-ranged-read", {},
14821494
OpenObjectMultipleRangedRead),
14831495
make_entry("open-object-read-full-object", {}, OpenObjectReadFullObject),
1484-
make_entry("open-multiple-object-ranged-read",
1496+
make_entry("open-multiple-objects-ranged-read",
14851497
{"<object-name-1>", "<object-name-2>", "<object-name-3>"},
1486-
OpenMultipleObjectRangedRead),
1498+
OpenMultipleObjectsRangedRead),
14871499
make_entry("read-object", {}, ReadObject),
14881500
make_entry("read-all", {}, ReadAll),
14891501
make_entry("read-object-range", {}, ReadObjectRange),
@@ -1512,7 +1524,7 @@ int main(int argc, char* argv[]) try {
15121524

15131525
make_entry("rewrite-object", {"<destination>"}, RewriteObject),
15141526
make_entry("resume-rewrite-object", {"<destination>"}, ResumeRewrite),
1515-
make_entry("read-object-tail", {}, ReadObjectTail),
1527+
make_entry("read-appendable-object-tail", {}, ReadAppendableObjectTail),
15161528
{"auto", AutoRun},
15171529
});
15181530
return example.Run(argc, argv);

0 commit comments

Comments
 (0)