Introduce fspp::openflags_t

This commit is contained in:
Sebastian Messmer 2018-09-15 23:06:08 -07:00
parent d1273677a5
commit 43ffff5900
10 changed files with 33 additions and 18 deletions

View File

@ -32,7 +32,7 @@ unique_ref<parallelaccessfsblobstore::FileBlobRef> CryFile::LoadBlob() const {
return std::move(*file_blob); return std::move(*file_blob);
} }
unique_ref<fspp::OpenFile> CryFile::open(int flags) { unique_ref<fspp::OpenFile> CryFile::open(fspp::openflags_t flags) {
// TODO Should we honor open flags? // TODO Should we honor open flags?
UNUSED(flags); UNUSED(flags);
device()->callFsActionCallbacks(); device()->callFsActionCallbacks();

View File

@ -14,7 +14,7 @@ public:
CryFile(CryDevice *device, cpputils::unique_ref<parallelaccessfsblobstore::DirBlobRef> parent, boost::optional<cpputils::unique_ref<parallelaccessfsblobstore::DirBlobRef>> grandparent, const blockstore::BlockId &blockId); CryFile(CryDevice *device, cpputils::unique_ref<parallelaccessfsblobstore::DirBlobRef> parent, boost::optional<cpputils::unique_ref<parallelaccessfsblobstore::DirBlobRef>> grandparent, const blockstore::BlockId &blockId);
~CryFile(); ~CryFile();
cpputils::unique_ref<fspp::OpenFile> open(int flags) override; cpputils::unique_ref<fspp::OpenFile> open(fspp::openflags_t flags) override;
void truncate(fspp::num_bytes_t size) override; void truncate(fspp::num_bytes_t size) override;
fspp::Dir::EntryType getType() const override; fspp::Dir::EntryType getType() const override;
void remove() override; void remove() override;

View File

@ -13,7 +13,7 @@ class File {
public: public:
virtual ~File() {} virtual ~File() {}
virtual cpputils::unique_ref<OpenFile> open(int flags) = 0; virtual cpputils::unique_ref<OpenFile> open(fspp::openflags_t flags) = 0;
virtual void truncate(fspp::num_bytes_t size) = 0; virtual void truncate(fspp::num_bytes_t size) = 0;
}; };

View File

@ -130,6 +130,21 @@ public:
} }
}; };
struct openflags_t final : cpputils::value_type::FlagsValueType<openflags_t, int> {
// TODO Remove default constructor
constexpr openflags_t() noexcept: FlagsValueType(0) {}
constexpr explicit openflags_t(int id) noexcept : FlagsValueType(id) {}
constexpr int value() const noexcept {
return value_;
}
static constexpr openflags_t RDONLY() { return openflags_t(0x0000); };
static constexpr openflags_t WRONLY() { return openflags_t(0x0001); };
static constexpr openflags_t RDWR() { return openflags_t(0x0002); };
};
struct num_bytes_t final : cpputils::value_type::QuantityValueType<num_bytes_t, int64_t> { struct num_bytes_t final : cpputils::value_type::QuantityValueType<num_bytes_t, int64_t> {
// TODO Remove default constructor // TODO Remove default constructor
constexpr num_bytes_t() noexcept: QuantityValueType(0) {} constexpr num_bytes_t() noexcept: QuantityValueType(0) {}

View File

@ -12,15 +12,15 @@ template<class ConcreteFileSystemTestFixture>
class FsppFileTest: public FileTest<ConcreteFileSystemTestFixture> { class FsppFileTest: public FileTest<ConcreteFileSystemTestFixture> {
public: public:
void Test_Open_RDONLY(fspp::File *file) { void Test_Open_RDONLY(fspp::File *file) {
file->open(O_RDONLY); file->open(fspp::openflags_t::RDONLY());
} }
void Test_Open_WRONLY(fspp::File *file) { void Test_Open_WRONLY(fspp::File *file) {
file->open(O_WRONLY); file->open(fspp::openflags_t::WRONLY());
} }
void Test_Open_RDWR(fspp::File *file) { void Test_Open_RDWR(fspp::File *file) {
file->open(O_RDONLY); file->open(fspp::openflags_t::RDONLY());
} }
void Test_Truncate_DontChange1(fspp::File *file, fspp::Node *node) { void Test_Truncate_DontChange1(fspp::File *file, fspp::Node *node) {

View File

@ -19,7 +19,7 @@ TYPED_TEST_CASE_P(FsppFileTest_Timestamps);
TYPED_TEST_P(FsppFileTest_Timestamps, open_nomode) { TYPED_TEST_P(FsppFileTest_Timestamps, open_nomode) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto operation = [&file] () { auto operation = [&file] () {
file->open(0); file->open(fspp::openflags_t(0));
}; };
this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps}); this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps});
} }
@ -27,7 +27,7 @@ TYPED_TEST_P(FsppFileTest_Timestamps, open_nomode) {
TYPED_TEST_P(FsppFileTest_Timestamps, open_rdonly) { TYPED_TEST_P(FsppFileTest_Timestamps, open_rdonly) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto operation = [&file] () { auto operation = [&file] () {
file->open(O_RDONLY); file->open(fspp::openflags_t::RDONLY());
}; };
this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps}); this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps});
} }
@ -35,7 +35,7 @@ TYPED_TEST_P(FsppFileTest_Timestamps, open_rdonly) {
TYPED_TEST_P(FsppFileTest_Timestamps, open_wronly) { TYPED_TEST_P(FsppFileTest_Timestamps, open_wronly) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto operation = [&file] () { auto operation = [&file] () {
file->open(O_WRONLY); file->open(fspp::openflags_t::WRONLY());
}; };
this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps}); this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps});
} }
@ -43,7 +43,7 @@ TYPED_TEST_P(FsppFileTest_Timestamps, open_wronly) {
TYPED_TEST_P(FsppFileTest_Timestamps, open_rdwr) { TYPED_TEST_P(FsppFileTest_Timestamps, open_rdwr) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto operation = [&file] () { auto operation = [&file] () {
file->open(O_RDWR); file->open(fspp::openflags_t::RDWR());
}; };
this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps}); this->EXPECT_OPERATION_UPDATES_TIMESTAMPS_AS("/myfile", operation, {this->ExpectDoesntUpdateAnyTimestamps});
} }

View File

@ -33,13 +33,13 @@ TYPED_TEST_CASE_P(FsppOpenFileTest);
TYPED_TEST_P(FsppOpenFileTest, CreatedFileIsEmpty) { TYPED_TEST_P(FsppOpenFileTest, CreatedFileIsEmpty) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto openFile = this->LoadFile("/myfile")->open(O_RDONLY); auto openFile = this->LoadFile("/myfile")->open(fspp::openflags_t::RDONLY());
this->EXPECT_SIZE(fspp::num_bytes_t(0), openFile.get()); this->EXPECT_SIZE(fspp::num_bytes_t(0), openFile.get());
} }
TYPED_TEST_P(FsppOpenFileTest, FileIsFile) { TYPED_TEST_P(FsppOpenFileTest, FileIsFile) {
auto file = this->CreateFile("/myfile"); auto file = this->CreateFile("/myfile");
auto openFile = this->LoadFile("/myfile")->open(O_RDONLY); auto openFile = this->LoadFile("/myfile")->open(fspp::openflags_t::RDONLY());
this->IN_STAT(openFile.get(), [] (const fspp::OpenFile::stat_info& st) { this->IN_STAT(openFile.get(), [] (const fspp::OpenFile::stat_info& st) {
EXPECT_TRUE(st.mode.hasFileFlag()); EXPECT_TRUE(st.mode.hasFileFlag());
}); });

View File

@ -8,12 +8,12 @@ template<class ConcreteFileSystemTestFixture>
class FsppOpenFileTest_Timestamps: public TimestampTestUtils<ConcreteFileSystemTestFixture> { class FsppOpenFileTest_Timestamps: public TimestampTestUtils<ConcreteFileSystemTestFixture> {
public: public:
cpputils::unique_ref<fspp::OpenFile> CreateAndOpenFile(const boost::filesystem::path &path) { cpputils::unique_ref<fspp::OpenFile> CreateAndOpenFile(const boost::filesystem::path &path) {
return this->CreateFile(path)->open(O_RDWR); return this->CreateFile(path)->open(fspp::openflags_t::RDWR());
} }
cpputils::unique_ref<fspp::OpenFile> CreateAndOpenFileWithSize(const boost::filesystem::path &path, fspp::num_bytes_t size) { cpputils::unique_ref<fspp::OpenFile> CreateAndOpenFileWithSize(const boost::filesystem::path &path, fspp::num_bytes_t size) {
auto file = this->CreateFile(path); auto file = this->CreateFile(path);
file->truncate(size); file->truncate(size);
auto openFile = file->open(O_RDWR); auto openFile = file->open(fspp::openflags_t::RDWR());
assert(this->stat(*openFile).size == size); assert(this->stat(*openFile).size == size);
assert(this->stat(*this->Load(path)).size == size); assert(this->stat(*this->Load(path)).size == size);
return openFile; return openFile;

View File

@ -31,7 +31,7 @@ public:
void IN_STAT(fspp::File *file, fspp::Node *node, std::function<void (const fspp::Node::stat_info&)> callback) { void IN_STAT(fspp::File *file, fspp::Node *node, std::function<void (const fspp::Node::stat_info&)> callback) {
auto st1 = node->stat(); auto st1 = node->stat();
callback(st1); callback(st1);
auto st2 = file->open(O_RDONLY)->stat(); auto st2 = file->open(fspp::openflags_t::RDONLY())->stat();
callback(st2); callback(st2);
} }
@ -44,7 +44,7 @@ public:
} }
void EXPECT_NUMBYTES_READABLE(fspp::num_bytes_t expectedSize, fspp::File *file) { void EXPECT_NUMBYTES_READABLE(fspp::num_bytes_t expectedSize, fspp::File *file) {
auto openFile = file->open(O_RDONLY); auto openFile = file->open(fspp::openflags_t::RDONLY());
cpputils::Data data(expectedSize.value()); cpputils::Data data(expectedSize.value());
//Try to read one byte more than the expected size //Try to read one byte more than the expected size
fspp::num_bytes_t readBytes = openFile->read(data.data(), expectedSize+fspp::num_bytes_t(1), fspp::num_bytes_t(0)); fspp::num_bytes_t readBytes = openFile->read(data.data(), expectedSize+fspp::num_bytes_t(1), fspp::num_bytes_t(0));

View File

@ -125,7 +125,7 @@ int FilesystemImpl::openFile(const bf::path &path, int flags) {
int FilesystemImpl::openFile(File *file, int flags) { int FilesystemImpl::openFile(File *file, int flags) {
PROFILE(_openFileNanosec); PROFILE(_openFileNanosec);
return _open_files.open(file->open(flags)); return _open_files.open(file->open(fspp::openflags_t(flags)));
} }
void FilesystemImpl::flush(int descriptor) { void FilesystemImpl::flush(int descriptor) {