mirror of https://github.com/facebook/rocksdb.git
Remove WritableFile(FSWritableFile)::GetFileSize default implementation (#12303)
Summary: As titled. This changes public API behavior, and subclasses of `WritableFile` and `FSWritableFile` need to explicitly provide an implementation for the `GetFileSize` method after this change. Pull Request resolved: https://github.com/facebook/rocksdb/pull/12303 Reviewed By: ajkr Differential Revision: D53205769 Pulled By: jowlyzhang fbshipit-source-id: 2e613ca3650302913821b33159b742bdf1d24bc7
This commit is contained in:
parent
aacf60dda2
commit
b10c171e58
|
@ -1002,7 +1002,7 @@ class WritableFile {
|
|||
/*
|
||||
* Get the size of valid data in the file.
|
||||
*/
|
||||
virtual uint64_t GetFileSize() { return 0; }
|
||||
virtual uint64_t GetFileSize() = 0;
|
||||
|
||||
/*
|
||||
* Get and set the default pre-allocation block size for writes to
|
||||
|
|
|
@ -1144,9 +1144,7 @@ class FSWritableFile {
|
|||
* Get the size of valid data in the file.
|
||||
*/
|
||||
virtual uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) {
|
||||
return 0;
|
||||
}
|
||||
IODebugContext* /*dbg*/) = 0;
|
||||
|
||||
/*
|
||||
* Get and set the default pre-allocation block size for writes to
|
||||
|
|
|
@ -189,6 +189,11 @@ class StringSink : public FSWritableFile {
|
|||
}
|
||||
}
|
||||
|
||||
uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) override {
|
||||
return contents_.size();
|
||||
}
|
||||
|
||||
private:
|
||||
Slice* reader_contents_;
|
||||
size_t last_flush_;
|
||||
|
@ -285,6 +290,11 @@ class OverwritingStringSink : public FSWritableFile {
|
|||
if (last_flush_ > contents_.size()) last_flush_ = contents_.size();
|
||||
}
|
||||
|
||||
uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) override {
|
||||
return contents_.size();
|
||||
}
|
||||
|
||||
private:
|
||||
std::string contents_;
|
||||
Slice* reader_contents_;
|
||||
|
@ -562,6 +572,14 @@ class StringFS : public FileSystemWrapper {
|
|||
return IOStatus::OK();
|
||||
}
|
||||
|
||||
uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) override {
|
||||
if (contents_ != nullptr) {
|
||||
return contents_->size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string* contents_;
|
||||
};
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
*Remove the default `WritableFile::GetFileSize` and `FSWritableFile::GetFileSize` implementation that returns 0 and make it pure virtual, so that subclasses are enforced to explicitly provide an implementation.
|
|
@ -463,6 +463,11 @@ TEST_F(WritableFileWriterTest, AppendStatusReturn) {
|
|||
void Setuse_direct_io(bool val) { use_direct_io_ = val; }
|
||||
void SetIOError(bool val) { io_error_ = val; }
|
||||
|
||||
uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool use_direct_io_;
|
||||
bool io_error_;
|
||||
|
@ -862,6 +867,11 @@ TEST_F(DBWritableFileWriterTest, IOErrorNotification) {
|
|||
ASSERT_EQ(file_flush_errors_, file_flush_errors);
|
||||
}
|
||||
|
||||
uint64_t GetFileSize(const IOOptions& /*options*/,
|
||||
IODebugContext* /*dbg*/) override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool io_error_;
|
||||
std::atomic<size_t> file_append_errors_;
|
||||
|
|
|
@ -96,6 +96,11 @@ class TestFSWritableFile : public FSWritableFile {
|
|||
return target_->use_direct_io();
|
||||
}
|
||||
|
||||
virtual uint64_t GetFileSize(const IOOptions& options,
|
||||
IODebugContext* dbg) override {
|
||||
return target_->GetFileSize(options, dbg);
|
||||
}
|
||||
|
||||
private:
|
||||
FSFileState state_; // Need protection by mutex_
|
||||
FileOptions file_opts_;
|
||||
|
|
Loading…
Reference in New Issue