mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
405550c6fe
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. A few final write calls need to be threaded as well. Reviewed By: xavierd Differential Revision: D28844011 fbshipit-source-id: 214853eea7fa65263fe6415e1ae8b76ca21512d6
139 lines
4.2 KiB
C++
139 lines
4.2 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This software may be used and distributed according to the terms of the
|
|
* GNU General Public License version 2.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "eden/fs/fuse/FuseDispatcher.h"
|
|
|
|
namespace facebook::eden {
|
|
|
|
class EdenMount;
|
|
class InodeMap;
|
|
|
|
/**
|
|
* Implement the FuseDispatcher interface.
|
|
*
|
|
* For unsupported operations, the corresponding methods are explicitly not
|
|
* overridden and will directly fail in FuseDispatcher.
|
|
*/
|
|
class FuseDispatcherImpl : public FuseDispatcher {
|
|
public:
|
|
explicit FuseDispatcherImpl(EdenMount* mount);
|
|
|
|
ImmediateFuture<struct fuse_kstatfs> statfs(InodeNumber ino) override;
|
|
ImmediateFuture<Attr> getattr(InodeNumber ino, ObjectFetchContext& context)
|
|
override;
|
|
ImmediateFuture<Attr> setattr(
|
|
InodeNumber ino,
|
|
const fuse_setattr_in& attr,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<uint64_t> opendir(InodeNumber ino, int flags) override;
|
|
ImmediateFuture<folly::Unit> releasedir(InodeNumber ino, uint64_t fh)
|
|
override;
|
|
ImmediateFuture<fuse_entry_out> lookup(
|
|
uint64_t requestID,
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
ObjectFetchContext& context) override;
|
|
|
|
void forget(InodeNumber ino, unsigned long nlookup) override;
|
|
ImmediateFuture<uint64_t> open(InodeNumber ino, int flags) override;
|
|
ImmediateFuture<std::string> readlink(
|
|
InodeNumber ino,
|
|
bool kernelCachesReadlink,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<fuse_entry_out> mknod(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
mode_t mode,
|
|
dev_t rdev,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<fuse_entry_out> mkdir(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
mode_t mode,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<folly::Unit> unlink(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<folly::Unit> rmdir(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<fuse_entry_out> symlink(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
folly::StringPiece link,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<folly::Unit> rename(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
InodeNumber newparent,
|
|
PathComponentPiece newname,
|
|
ObjectFetchContext& context) override;
|
|
|
|
ImmediateFuture<fuse_entry_out> link(
|
|
InodeNumber ino,
|
|
InodeNumber newparent,
|
|
PathComponentPiece newname) override;
|
|
|
|
ImmediateFuture<fuse_entry_out> create(
|
|
InodeNumber parent,
|
|
PathComponentPiece name,
|
|
mode_t mode,
|
|
int flags,
|
|
ObjectFetchContext& context) override;
|
|
|
|
ImmediateFuture<BufVec> read(
|
|
InodeNumber ino,
|
|
size_t size,
|
|
off_t off,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<size_t> write(
|
|
InodeNumber ino,
|
|
folly::StringPiece data,
|
|
off_t off,
|
|
ObjectFetchContext& context) override;
|
|
|
|
ImmediateFuture<folly::Unit> flush(InodeNumber ino, uint64_t lock_owner)
|
|
override;
|
|
ImmediateFuture<folly::Unit> fallocate(
|
|
InodeNumber ino,
|
|
uint64_t offset,
|
|
uint64_t length,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<folly::Unit> fsync(InodeNumber ino, bool datasync) override;
|
|
ImmediateFuture<folly::Unit> fsyncdir(InodeNumber ino, bool datasync)
|
|
override;
|
|
|
|
ImmediateFuture<FuseDirList> readdir(
|
|
InodeNumber ino,
|
|
FuseDirList&& dirList,
|
|
off_t offset,
|
|
uint64_t fh,
|
|
ObjectFetchContext& context) override;
|
|
|
|
ImmediateFuture<std::string> getxattr(
|
|
InodeNumber ino,
|
|
folly::StringPiece name,
|
|
ObjectFetchContext& context) override;
|
|
ImmediateFuture<std::vector<std::string>> listxattr(InodeNumber ino) override;
|
|
|
|
private:
|
|
// The EdenMount associated with this dispatcher.
|
|
EdenMount* const mount_;
|
|
|
|
// The EdenMount's InodeMap.
|
|
// We store this pointer purely for convenience. We need it on pretty much
|
|
// every FUSE request, and having it locally avoids having to dereference
|
|
// mount_ first.
|
|
InodeMap* const inodeMap_;
|
|
};
|
|
|
|
} // namespace facebook::eden
|