win: thread the request context to readdir

Summary:
This allows removal of a NullContext which will provide more details as to why
fetches are triggered.

Reviewed By: chadaustin

Differential Revision: D23745755

fbshipit-source-id: c26f648b8695b86caf8fe15c4bc6c4128d345aa1
This commit is contained in:
Xavier Deguillard 2020-09-23 09:40:09 -07:00 committed by Facebook GitHub Bot
parent 436a847a79
commit 77ab04daf2
4 changed files with 12 additions and 12 deletions

View File

@ -1887,7 +1887,8 @@ TreeInode::readdir(DirList&& list, off_t off, ObjectFetchContext& context) {
#else
folly::Future<std::vector<FileMetadata>> TreeInode::readdir() {
folly::Future<std::vector<FileMetadata>> TreeInode::readdir(
ObjectFetchContext& context) {
vector<Future<FileMetadata>> futures;
{
auto dir = contents_.rlock();
@ -1899,8 +1900,6 @@ folly::Future<std::vector<FileMetadata>> TreeInode::readdir() {
auto winName = name.wide();
if (!isDir) {
static auto context = ObjectFetchContext::getNullContextWithCauseDetail(
"TreeInode::readdir");
// We only populates the file size for non-materialized files. For
// the materialized files, ProjectedFS will use the on-disk size.
auto hash = entry.getOptionalHash();
@ -1908,7 +1907,7 @@ folly::Future<std::vector<FileMetadata>> TreeInode::readdir() {
futures.emplace_back(
getMount()
->getObjectStore()
->getBlobSize(hash.value(), *context)
->getBlobSize(hash.value(), context)
.thenValue(
[winName = std::move(winName)](uint64_t size) mutable {
return FileMetadata(std::move(winName), false, size);

View File

@ -156,7 +156,8 @@ class TreeInode final : public InodeBaseMetadata<DirContents> {
* way to get it, so in this function as an optimization we don't populate the
* size of materialized files.
*/
FOLLY_NODISCARD folly::Future<std::vector<FileMetadata>> readdir();
FOLLY_NODISCARD folly::Future<std::vector<FileMetadata>> readdir(
ObjectFetchContext& context);
#endif
const folly::Synchronized<TreeInodeState>& getContents() const {

View File

@ -88,7 +88,7 @@ TEST(TreeInode, readdirTest) {
TestMount mount{builder};
auto root = mount.getEdenMount()->getRootInode();
auto result = root->readdir().get(0ms);
auto result = root->readdir(ObjectFetchContext::getNullContext()).get(0ms);
ASSERT_EQ(2, result.size());
EXPECT_EQ(L".eden", result[0].name);
@ -104,7 +104,7 @@ TEST(TreeInode, updateAndReaddir) {
// Test creating a new file
auto somedir = mount.getTreeInode("somedir"_relpath);
auto result = somedir->readdir().get(0ms);
auto result = somedir->readdir(ObjectFetchContext::getNullContext()).get(0ms);
ASSERT_EQ(3, result.size());
EXPECT_EQ(L"file1", result[0].name);
@ -113,7 +113,7 @@ TEST(TreeInode, updateAndReaddir) {
auto resultInode =
somedir->mknod("newfile.txt"_pc, S_IFREG, 0, InvalidationRequired::No);
result = somedir->readdir().get(0ms);
result = somedir->readdir(ObjectFetchContext::getNullContext()).get(0ms);
ASSERT_EQ(4, result.size());
EXPECT_EQ(L"file1", result[0].name);
EXPECT_EQ(L"file2", result[1].name);
@ -121,7 +121,7 @@ TEST(TreeInode, updateAndReaddir) {
EXPECT_EQ(L"newfile.txt", result[3].name);
somedir->unlink("file2"_pc, InvalidationRequired::No).get(0ms);
result = somedir->readdir().get(0ms);
result = somedir->readdir(ObjectFetchContext::getNullContext()).get(0ms);
ASSERT_EQ(3, result.size());
EXPECT_EQ(L"file1", result[0].name);
EXPECT_EQ(L"file3", result[1].name);
@ -131,7 +131,7 @@ TEST(TreeInode, updateAndReaddir) {
->rename(
"file3"_pc, somedir, "renamedfile.txt"_pc, InvalidationRequired::No)
.get(0ms);
result = somedir->readdir().get(0ms);
result = somedir->readdir(ObjectFetchContext::getNullContext()).get(0ms);
ASSERT_EQ(3, result.size());
EXPECT_EQ(L"file1", result[0].name);
EXPECT_EQ(L"newfile.txt", result[1].name);

View File

@ -67,9 +67,9 @@ folly::Future<folly::Unit> EdenDispatcher::opendir(
FB_LOGF(mount_->getStraceLogger(), DBG7, "opendir({}, guid={})", path, guid);
return mount_->getInode(path)
.thenValue([](const InodePtr inode) {
.thenValue([&context](const InodePtr inode) {
auto treePtr = inode.asTreePtr();
return treePtr->readdir();
return treePtr->readdir(context);
})
.thenValue([this, guid = std::move(guid)](auto&& dirents) {
auto [iterator, inserted] =