mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
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:
parent
436a847a79
commit
77ab04daf2
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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] =
|
||||
|
Loading…
Reference in New Issue
Block a user