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) { ...@@ -1362,9 +1362,8 @@ collectAnyWithoutException(InputIterator first, InputIterator last) {
// collectN (iterator) // collectN (iterator)
// TODO(T26439406): Make return SemiFuture
template <class InputIterator> template <class InputIterator>
Future<std::vector<std::pair< SemiFuture<std::vector<std::pair<
size_t, size_t,
Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>> Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>>
collectN(InputIterator first, InputIterator last, size_t n) { collectN(InputIterator first, InputIterator last, size_t n) {
...@@ -1427,7 +1426,7 @@ 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) // reduce (iterator)
......
...@@ -396,9 +396,9 @@ auto collectAnyWithoutException(Collection&& c) ...@@ -396,9 +396,9 @@ auto collectAnyWithoutException(Collection&& c)
Not thread safe. Not thread safe.
*/ */
template <class InputIterator> template <class InputIterator>
Future<std::vector<std::pair< SemiFuture<std::vector<std::pair<
size_t, size_t,
Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>> Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>>
collectN(InputIterator first, InputIterator last, size_t n); collectN(InputIterator first, InputIterator last, size_t n);
/// Sugar for the most common case /// Sugar for the most common case
......
...@@ -577,13 +577,14 @@ TEST(Collect, collectN) { ...@@ -577,13 +577,14 @@ TEST(Collect, collectN) {
bool flag = false; bool flag = false;
size_t n = 3; size_t n = 3;
collectN(futures, n) collectN(futures, n)
.then([&](std::vector<std::pair<size_t, Try<Unit>>> v) { .via(&folly::InlineExecutor::instance())
flag = true; .then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
EXPECT_EQ(n, v.size()); flag = true;
for (auto& tt : v) { EXPECT_EQ(n, v.size());
EXPECT_TRUE(tt.second.hasValue()); for (auto& tt : v) {
} EXPECT_TRUE(tt.second.hasValue());
}); }
});
promises[0].setValue(); promises[0].setValue();
EXPECT_FALSE(flag); EXPECT_FALSE(flag);
...@@ -603,13 +604,15 @@ TEST(Collect, collectNParallel) { ...@@ -603,13 +604,15 @@ TEST(Collect, collectNParallel) {
bool flag = false; bool flag = false;
size_t n = 90; size_t n = 90;
collectN(futures, n).then([&](std::vector<std::pair<size_t, Try<Unit>>> v) { collectN(futures, n)
flag = true; .via(&folly::InlineExecutor::instance())
EXPECT_EQ(n, v.size()); .then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
for (auto& tt : v) { flag = true;
EXPECT_TRUE(tt.second.hasValue()); EXPECT_EQ(n, v.size());
} for (auto& tt : v) {
}); EXPECT_TRUE(tt.second.hasValue());
}
});
std::vector<std::thread> ts; std::vector<std::thread> ts;
boost::barrier barrier(ps.size() + 1); 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