mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
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:
parent
88cb4ec5ba
commit
f1d0de859f
@ -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);
|
||||
});
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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});
|
||||
});
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user