mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 04:50:31 -04:00
metadata_v2: implement more filesystem functions
This commit is contained in:
parent
1af13f4e62
commit
890d816f25
@ -62,46 +62,48 @@ class filesystem_v2 {
|
|||||||
impl_->walk(func);
|
impl_->walk(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
std::optional<entry_view> find(const char* path) const {
|
||||||
const dir_entry* find(const char* path) const { return impl_->find(path); }
|
return impl_->find(path);
|
||||||
|
}
|
||||||
|
|
||||||
const dir_entry* find(int inode) const { return impl_->find(inode); }
|
std::optional<entry_view> find(int inode) const { return impl_->find(inode); }
|
||||||
|
|
||||||
const dir_entry* find(int inode, const char* name) const {
|
std::optional<entry_view> find(int inode, const char* name) const {
|
||||||
return impl_->find(inode, name);
|
return impl_->find(inode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getattr(const dir_entry* de, struct ::stat* stbuf) const {
|
int getattr(entry_view entry, struct ::stat* stbuf) const {
|
||||||
return impl_->getattr(de, stbuf);
|
return impl_->getattr(entry, stbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int access(const dir_entry* de, int mode, uid_t uid, gid_t gid) const {
|
int access(entry_view entry, int mode, uid_t uid, gid_t gid) const {
|
||||||
return impl_->access(de, mode, uid, gid);
|
return impl_->access(entry, mode, uid, gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
const directory* opendir(const dir_entry* de) const {
|
std::optional<directory_view> opendir(entry_view entry) const {
|
||||||
return impl_->opendir(de);
|
return impl_->opendir(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
const dir_entry*
|
std::optional<std::pair<entry_view, std::string_view>>
|
||||||
readdir(const directory* d, size_t offset, std::string* name) const {
|
readdir(directory_view dir, size_t offset) const {
|
||||||
return impl_->readdir(d, offset, name);
|
return impl_->readdir(dir, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t dirsize(const directory* d) const { return impl_->dirsize(d); }
|
size_t dirsize(directory_view dir) const { return impl_->dirsize(dir); }
|
||||||
|
|
||||||
int readlink(const dir_entry* de, char* buf, size_t size) const {
|
int readlink(entry_view entry, std::string* buf) const {
|
||||||
return impl_->readlink(de, buf, size);
|
return impl_->readlink(entry, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int readlink(const dir_entry* de, std::string* buf) const {
|
folly::Expected<std::string_view, int> readlink(entry_view entry) const {
|
||||||
return impl_->readlink(de, buf);
|
return impl_->readlink(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
int statvfs(struct ::statvfs* stbuf) const { return impl_->statvfs(stbuf); }
|
int statvfs(struct ::statvfs* stbuf) const { return impl_->statvfs(stbuf); }
|
||||||
|
|
||||||
int open(const dir_entry* de) const { return impl_->open(de); }
|
int open(entry_view entry) const { return impl_->open(entry); }
|
||||||
|
|
||||||
|
#if 0
|
||||||
ssize_t read(uint32_t inode, char* buf, size_t size, off_t offset) const {
|
ssize_t read(uint32_t inode, char* buf, size_t size, off_t offset) const {
|
||||||
return impl_->read(inode, buf, size, offset);
|
return impl_->read(inode, buf, size, offset);
|
||||||
}
|
}
|
||||||
@ -118,21 +120,23 @@ class filesystem_v2 {
|
|||||||
|
|
||||||
virtual void dump(std::ostream& os) const = 0;
|
virtual void dump(std::ostream& os) const = 0;
|
||||||
virtual void walk(std::function<void(entry_view)> const& func) const = 0;
|
virtual void walk(std::function<void(entry_view)> const& func) const = 0;
|
||||||
#if 0
|
virtual std::optional<entry_view> find(const char* path) const = 0;
|
||||||
virtual const dir_entry* find(const char* path) const = 0;
|
virtual std::optional<entry_view> find(int inode) const = 0;
|
||||||
virtual const dir_entry* find(int inode) const = 0;
|
virtual std::optional<entry_view>
|
||||||
virtual const dir_entry* find(int inode, const char* name) const = 0;
|
find(int inode, const char* name) const = 0;
|
||||||
virtual int getattr(const dir_entry* de, struct ::stat* stbuf) const = 0;
|
virtual int getattr(entry_view entry, struct ::stat* stbuf) const = 0;
|
||||||
virtual int
|
virtual int
|
||||||
access(const dir_entry* de, int mode, uid_t uid, gid_t gid) const = 0;
|
access(entry_view entry, int mode, uid_t uid, gid_t gid) const = 0;
|
||||||
virtual const directory* opendir(const dir_entry* de) const = 0;
|
virtual std::optional<directory_view> opendir(entry_view entry) const = 0;
|
||||||
virtual const dir_entry*
|
virtual std::optional<std::pair<entry_view, std::string_view>>
|
||||||
readdir(const directory* d, size_t offset, std::string* name) const = 0;
|
readdir(directory_view dir, size_t offset) const = 0;
|
||||||
virtual size_t dirsize(const directory* d) const = 0;
|
virtual size_t dirsize(directory_view dir) const = 0;
|
||||||
virtual int readlink(const dir_entry* de, char* buf, size_t size) const = 0;
|
virtual int readlink(entry_view entry, std::string* buf) const = 0;
|
||||||
virtual int readlink(const dir_entry* de, std::string* buf) const = 0;
|
virtual folly::Expected<std::string_view, int>
|
||||||
|
readlink(entry_view entry) const = 0;
|
||||||
virtual int statvfs(struct ::statvfs* stbuf) const = 0;
|
virtual int statvfs(struct ::statvfs* stbuf) const = 0;
|
||||||
virtual int open(const dir_entry* de) const = 0;
|
virtual int open(entry_view entry) const = 0;
|
||||||
|
#if 0
|
||||||
virtual ssize_t
|
virtual ssize_t
|
||||||
read(uint32_t inode, char* buf, size_t size, off_t offset) const = 0;
|
read(uint32_t inode, char* buf, size_t size, off_t offset) const = 0;
|
||||||
virtual ssize_t readv(uint32_t inode, iovec_read_buf& buf, size_t size,
|
virtual ssize_t readv(uint32_t inode, iovec_read_buf& buf, size_t size,
|
||||||
|
@ -174,8 +174,10 @@ class metadata_v2 {
|
|||||||
|
|
||||||
static void get_stat_defaults(struct ::stat* defaults);
|
static void get_stat_defaults(struct ::stat* defaults);
|
||||||
|
|
||||||
|
// TODO: check if this is needed
|
||||||
size_t size() const { return impl_->size(); }
|
size_t size() const { return impl_->size(); }
|
||||||
|
|
||||||
|
// TODO: check if this is needed
|
||||||
bool empty() const { return !impl_ || impl_->empty(); }
|
bool empty() const { return !impl_ || impl_->empty(); }
|
||||||
|
|
||||||
void walk(std::function<void(entry_view)> const& func) const {
|
void walk(std::function<void(entry_view)> const& func) const {
|
||||||
|
@ -179,7 +179,7 @@ void block_manager_<LoggerPolicy>::finish_blocks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& sti : stats_) {
|
for (const auto& sti : stats_) {
|
||||||
static char const* const percent = "{:.2%}%";
|
static char const* const percent = "{:.2}%";
|
||||||
const auto& st = sti.second;
|
const auto& st = sti.second;
|
||||||
log_.debug() << "blockhash window <" << sti.first << ">: " << st.collisions
|
log_.debug() << "blockhash window <" << sti.first << ">: " << st.collisions
|
||||||
<< " collisions ("
|
<< " collisions ("
|
||||||
|
@ -159,21 +159,21 @@ class filesystem_ : public filesystem_v2::impl {
|
|||||||
|
|
||||||
void dump(std::ostream& os) const override;
|
void dump(std::ostream& os) const override;
|
||||||
void walk(std::function<void(entry_view)> const& func) const override;
|
void walk(std::function<void(entry_view)> const& func) const override;
|
||||||
#if 0
|
std::optional<entry_view> find(const char* path) const override;
|
||||||
const dir_entry* find(const char* path) const override;
|
std::optional<entry_view> find(int inode) const override;
|
||||||
const dir_entry* find(int inode) const override;
|
std::optional<entry_view> find(int inode, const char* name) const override;
|
||||||
const dir_entry* find(int inode, const char* name) const override;
|
int getattr(entry_view entry, struct ::stat* stbuf) const override;
|
||||||
int getattr(const dir_entry* de, struct ::stat* stbuf) const override;
|
int access(entry_view entry, int mode, uid_t uid, gid_t gid) const override;
|
||||||
int access(const dir_entry* de, int mode, uid_t uid,
|
std::optional<directory_view> opendir(entry_view entry) const override;
|
||||||
gid_t gid) const override;
|
std::optional<std::pair<entry_view, std::string_view>>
|
||||||
const directory* opendir(const dir_entry* de) const override;
|
readdir(directory_view dir, size_t offset) const override;
|
||||||
const dir_entry*
|
size_t dirsize(directory_view dir) const override;
|
||||||
readdir(const directory* d, size_t offset, std::string* name) const override;
|
int readlink(entry_view entry, std::string* buf) const override;
|
||||||
size_t dirsize(const directory* d) const override;
|
folly::Expected<std::string_view, int>
|
||||||
int readlink(const dir_entry* de, char* buf, size_t size) const override;
|
readlink(entry_view entry) const override;
|
||||||
int readlink(const dir_entry* de, std::string* buf) const override;
|
|
||||||
int statvfs(struct ::statvfs* stbuf) const override;
|
int statvfs(struct ::statvfs* stbuf) const override;
|
||||||
int open(const dir_entry* de) const override;
|
int open(entry_view entry) const override;
|
||||||
|
#if 0
|
||||||
ssize_t
|
ssize_t
|
||||||
read(uint32_t inode, char* buf, size_t size, off_t offset) const override;
|
read(uint32_t inode, char* buf, size_t size, off_t offset) const override;
|
||||||
ssize_t readv(uint32_t inode, iovec_read_buf& buf, size_t size,
|
ssize_t readv(uint32_t inode, iovec_read_buf& buf, size_t size,
|
||||||
@ -249,62 +249,62 @@ void filesystem_<LoggerPolicy>::walk(
|
|||||||
meta_.walk(func);
|
meta_.walk(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
const dir_entry* filesystem_<LoggerPolicy>::find(const char* path) const {
|
std::optional<entry_view>
|
||||||
|
filesystem_<LoggerPolicy>::find(const char* path) const {
|
||||||
return meta_.find(path);
|
return meta_.find(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
const dir_entry* filesystem_<LoggerPolicy>::find(int inode) const {
|
std::optional<entry_view> filesystem_<LoggerPolicy>::find(int inode) const {
|
||||||
return meta_.find(inode);
|
return meta_.find(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
const dir_entry*
|
std::optional<entry_view>
|
||||||
filesystem_<LoggerPolicy>::find(int inode, const char* name) const {
|
filesystem_<LoggerPolicy>::find(int inode, const char* name) const {
|
||||||
return meta_.find(inode, name);
|
return meta_.find(inode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int filesystem_<LoggerPolicy>::getattr(const dir_entry* de,
|
int filesystem_<LoggerPolicy>::getattr(entry_view entry,
|
||||||
struct ::stat* stbuf) const {
|
struct ::stat* stbuf) const {
|
||||||
return meta_.getattr(de, stbuf);
|
return meta_.getattr(entry, stbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int filesystem_<LoggerPolicy>::access(const dir_entry* de, int mode, uid_t uid,
|
int filesystem_<LoggerPolicy>::access(entry_view entry, int mode, uid_t uid,
|
||||||
gid_t gid) const {
|
gid_t gid) const {
|
||||||
return meta_.access(de, mode, uid, gid);
|
return meta_.access(entry, mode, uid, gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
const directory* filesystem_<LoggerPolicy>::opendir(const dir_entry* de) const {
|
std::optional<directory_view>
|
||||||
return meta_.opendir(de);
|
filesystem_<LoggerPolicy>::opendir(entry_view entry) const {
|
||||||
|
return meta_.opendir(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
const dir_entry*
|
std::optional<std::pair<entry_view, std::string_view>>
|
||||||
filesystem_<LoggerPolicy>::readdir(const directory* d, size_t offset,
|
filesystem_<LoggerPolicy>::readdir(directory_view dir, size_t offset) const {
|
||||||
std::string* name) const {
|
return meta_.readdir(dir, offset);
|
||||||
return meta_.readdir(d, offset, name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
size_t filesystem_<LoggerPolicy>::dirsize(const directory* d) const {
|
size_t filesystem_<LoggerPolicy>::dirsize(directory_view dir) const {
|
||||||
return meta_.dirsize(d);
|
return meta_.dirsize(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int filesystem_<LoggerPolicy>::readlink(const dir_entry* de, char* buf,
|
int filesystem_<LoggerPolicy>::readlink(entry_view entry,
|
||||||
size_t size) const {
|
|
||||||
return meta_.readlink(de, buf, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
|
||||||
int filesystem_<LoggerPolicy>::readlink(const dir_entry* de,
|
|
||||||
std::string* buf) const {
|
std::string* buf) const {
|
||||||
return meta_.readlink(de, buf);
|
return meta_.readlink(entry, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename LoggerPolicy>
|
||||||
|
folly::Expected<std::string_view, int>
|
||||||
|
filesystem_<LoggerPolicy>::readlink(entry_view entry) const {
|
||||||
|
return meta_.readlink(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
@ -314,10 +314,11 @@ int filesystem_<LoggerPolicy>::statvfs(struct ::statvfs* stbuf) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int filesystem_<LoggerPolicy>::open(const dir_entry* de) const {
|
int filesystem_<LoggerPolicy>::open(entry_view entry) const {
|
||||||
return meta_.open(de);
|
return meta_.open(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
ssize_t filesystem_<LoggerPolicy>::read(uint32_t inode, char* buf, size_t size,
|
ssize_t filesystem_<LoggerPolicy>::read(uint32_t inode, char* buf, size_t size,
|
||||||
off_t offset) const {
|
off_t offset) const {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user