Commit 1095ffdb authored by Orvid King's avatar Orvid King Committed by Facebook Github Bot

Make folly::collectN return a SemiFuture

Summary: Start with the easy one.

Reviewed By: yfeldblum

Differential Revision: D7957655

fbshipit-source-id: 0c2227402673306e1e6ba3f463b1a93db2582b07
parent 0fc4facd
......@@ -1362,9 +1362,8 @@ collectAnyWithoutException(InputIterator first, InputIterator last) {
// collectN (iterator)
// TODO(T26439406): Make return SemiFuture
template <class InputIterator>
Future<std::vector<std::pair<
SemiFuture<std::vector<std::pair<
size_t,
Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>>
collectN(InputIterator first, InputIterator last, size_t n) {
......@@ -1427,7 +1426,7 @@ collectN(InputIterator first, InputIterator last, size_t n) {
});
}
return ctx->p.getSemiFuture().via(&folly::InlineExecutor::instance());
return ctx->p.getSemiFuture();
}
// reduce (iterator)
......
......@@ -396,9 +396,9 @@ auto collectAnyWithoutException(Collection&& c)
Not thread safe.
*/
template <class InputIterator>
Future<std::vector<std::pair<
size_t,
Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>>
SemiFuture<std::vector<std::pair<
size_t,
Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>>
collectN(InputIterator first, InputIterator last, size_t n);
/// Sugar for the most common case
......
......@@ -577,13 +577,14 @@ TEST(Collect, collectN) {
bool flag = false;
size_t n = 3;
collectN(futures, n)
.then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
flag = true;
EXPECT_EQ(n, v.size());
for (auto& tt : v) {
EXPECT_TRUE(tt.second.hasValue());
}
});
.via(&folly::InlineExecutor::instance())
.then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
flag = true;
EXPECT_EQ(n, v.size());
for (auto& tt : v) {
EXPECT_TRUE(tt.second.hasValue());
}
});
promises[0].setValue();
EXPECT_FALSE(flag);
......@@ -603,13 +604,15 @@ TEST(Collect, collectNParallel) {
bool flag = false;
size_t n = 90;
collectN(futures, n).then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
flag = true;
EXPECT_EQ(n, v.size());
for (auto& tt : v) {
EXPECT_TRUE(tt.second.hasValue());
}
});
collectN(futures, n)
.via(&folly::InlineExecutor::instance())
.then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
flag = true;
EXPECT_EQ(n, v.size());
for (auto& tt : v) {
EXPECT_TRUE(tt.second.hasValue());
}
});
std::vector<std::thread> ts;
boost::barrier barrier(ps.size() + 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment