thread ObjectFetchContext mkdir

Summary:
There are a few remaining holes where we are not passing a full fetch context.
We will need a full fetch context to do all data fetch logging needed for the
intern project. Additionally, we generally should not be using these singletons
in our production code.

This change is for mkdir

Reviewed By: genevievehelsel

Differential Revision: D23458622

fbshipit-source-id: f3914a4f692490434882143664a5d5f1701e93ba
This commit is contained in:
Katie Mancini 2021-06-03 16:32:25 -07:00 committed by Facebook GitHub Bot
parent 88cb4ec5ba
commit f1d0de859f
6 changed files with 26 additions and 13 deletions

View File

@ -1984,7 +1984,7 @@ ImmediateFuture<folly::Unit> FuseChannel::fuseMkdir(
InodeNumber parent{header.nodeid};
mode_t mode = dir->mode & ~dir->umask;
return dispatcher_->mkdir(parent, name, mode)
return dispatcher_->mkdir(parent, name, mode, request)
.thenValue([&request](fuse_entry_out entry) {
request.sendReplyWithInode(entry.nodeid, entry);
});

View File

@ -104,8 +104,11 @@ ImmediateFuture<fuse_entry_out> FuseDispatcher::mknod(
FUSELL_NOT_IMPL();
}
ImmediateFuture<fuse_entry_out>
FuseDispatcher::mkdir(InodeNumber, PathComponentPiece, mode_t) {
ImmediateFuture<fuse_entry_out> FuseDispatcher::mkdir(
InodeNumber,
PathComponentPiece,
mode_t,
ObjectFetchContext&) {
FUSELL_NOT_IMPL();
}

View File

@ -176,8 +176,11 @@ class FuseDispatcher {
* @param name to create
* @param mode with which to create the new file
*/
virtual ImmediateFuture<fuse_entry_out>
mkdir(InodeNumber parent, PathComponentPiece name, mode_t mode);
virtual ImmediateFuture<fuse_entry_out> mkdir(
InodeNumber parent,
PathComponentPiece name,
mode_t mode,
ObjectFetchContext& context);
/**
* Remove a file

View File

@ -348,13 +348,13 @@ ImmediateFuture<fuse_entry_out> FuseDispatcherImpl::mknod(
ImmediateFuture<fuse_entry_out> FuseDispatcherImpl::mkdir(
InodeNumber parent,
PathComponentPiece name,
mode_t mode) {
static auto context = ObjectFetchContext::getNullContextWithCauseDetail(
"FuseDispatcherImpl::mkdir");
mode_t mode,
ObjectFetchContext& context) {
return inodeMap_->lookupTreeInode(parent).thenValue(
[childName = PathComponent{name}, mode](const TreeInodePtr& inode) {
[childName = PathComponent{name}, mode, &context](
const TreeInodePtr& inode) {
auto child = inode->mkdir(childName, mode, InvalidationRequired::No);
return child->stat(*context).thenValue([child](struct stat st) {
return child->stat(context).thenValue([child](struct stat st) {
child->incFsRefcount();
return computeEntryParam(FuseDispatcher::Attr{st});
});

View File

@ -50,8 +50,11 @@ class FuseDispatcherImpl : public FuseDispatcher {
mode_t mode,
dev_t rdev,
ObjectFetchContext& context) override;
ImmediateFuture<fuse_entry_out>
mkdir(InodeNumber parent, PathComponentPiece name, mode_t mode) override;
ImmediateFuture<fuse_entry_out> mkdir(
InodeNumber parent,
PathComponentPiece name,
mode_t mode,
ObjectFetchContext& context) override;
ImmediateFuture<folly::Unit> unlink(
InodeNumber parent,
PathComponentPiece name,

View File

@ -57,7 +57,11 @@ TEST_F(EdenDispatcherTest, mknodReturnsNameTooLong) {
TEST_F(EdenDispatcherTest, mkdirReturnsNameTooLong) {
try {
mount.getDispatcher()
->mkdir(kRootNodeId, kTooLong, S_IFDIR | 0755)
->mkdir(
kRootNodeId,
kTooLong,
S_IFDIR | 0755,
ObjectFetchContext::getNullContext())
.get(0ms);
FAIL() << "should throw";
} catch (std::system_error& e) {