Use override for virtual functions.

This commit is contained in:
Jingyu Zhou 2019-08-29 20:32:49 -07:00
parent b745373163
commit c7f51782b8
1 changed files with 34 additions and 34 deletions

View File

@ -39,7 +39,7 @@
namespace IBackupFile_impl { namespace IBackupFile_impl {
ACTOR Future<Void> appendStringRefWithLen(Reference<IBackupFile> file, Standalone<StringRef> s) { ACTOR Future<Void> appendStringRefWithLen(Reference<IBackupFile> file, Standalone<StringRef> s) {
state uint32_t lenBuf = bigEndian32((uint32_t)s.size()); state uint32_t lenBuf = bigEndian32((uint32_t)s.size());
wait(file->append(&lenBuf, sizeof(lenBuf))); wait(file->append(&lenBuf, sizeof(lenBuf)));
wait(file->append(s.begin(), s.size())); wait(file->append(s.begin(), s.size()));
@ -258,15 +258,15 @@ std::string BackupDescription::toJSON() const {
*/ */
class BackupContainerFileSystem : public IBackupContainer { class BackupContainerFileSystem : public IBackupContainer {
public: public:
virtual void addref() = 0; void addref() = 0 override;
virtual void delref() = 0; void delref() = 0 override;
BackupContainerFileSystem() {} BackupContainerFileSystem() {}
virtual ~BackupContainerFileSystem() {} virtual ~BackupContainerFileSystem() {}
// Create the container // Create the container
virtual Future<Void> create() = 0; Future<Void> create() = 0 override;
virtual Future<bool> exists() = 0; Future<bool> exists() = 0 override;
// Get a list of fileNames and their sizes in the container under the given path // Get a list of fileNames and their sizes in the container under the given path
// Although not required, an implementation can avoid traversing unwanted subfolders // Although not required, an implementation can avoid traversing unwanted subfolders
@ -275,7 +275,7 @@ public:
virtual Future<FilesAndSizesT> listFiles(std::string path = "", std::function<bool(std::string const &)> folderPathFilter = nullptr) = 0; virtual Future<FilesAndSizesT> listFiles(std::string path = "", std::function<bool(std::string const &)> folderPathFilter = nullptr) = 0;
// Open a file for read by fileName // Open a file for read by fileName
virtual Future<Reference<IAsyncFile>> readFile(std::string fileName) = 0; Future<Reference<IAsyncFile>> readFile(std::string fileName) = 0 override;
// Open a file for write by fileName // Open a file for write by fileName
virtual Future<Reference<IBackupFile>> writeFile(std::string fileName) = 0; virtual Future<Reference<IBackupFile>> writeFile(std::string fileName) = 0;
@ -285,7 +285,7 @@ public:
// Delete entire container. During the process, if pNumDeleted is not null it will be // Delete entire container. During the process, if pNumDeleted is not null it will be
// updated with the count of deleted files so that progress can be seen. // updated with the count of deleted files so that progress can be seen.
virtual Future<Void> deleteContainer(int *pNumDeleted) = 0; Future<Void> deleteContainer(int* pNumDeleted) = 0 override;
// Creates a 2-level path (x/y) where v should go such that x/y/* contains (10^smallestBucket) possible versions // Creates a 2-level path (x/y) where v should go such that x/y/* contains (10^smallestBucket) possible versions
static std::string versionFolderString(Version v, int smallestBucket) { static std::string versionFolderString(Version v, int smallestBucket) {
@ -333,11 +333,11 @@ public:
return format("logs/%s/", versionFolderString(v, 11).c_str()); return format("logs/%s/", versionFolderString(v, 11).c_str());
} }
Future<Reference<IBackupFile>> writeLogFile(Version beginVersion, Version endVersion, int blockSize) { Future<Reference<IBackupFile>> writeLogFile(Version beginVersion, Version endVersion, int blockSize) override {
return writeFile(logVersionFolderString(beginVersion) + format("log,%lld,%lld,%s,%d", beginVersion, endVersion, deterministicRandom()->randomUniqueID().toString().c_str(), blockSize)); return writeFile(logVersionFolderString(beginVersion) + format("log,%lld,%lld,%s,%d", beginVersion, endVersion, deterministicRandom()->randomUniqueID().toString().c_str(), blockSize));
} }
Future<Reference<IBackupFile>> writeRangeFile(Version snapshotBeginVersion, int snapshotFileCount, Version fileVersion, int blockSize) { Future<Reference<IBackupFile>> writeRangeFile(Version snapshotBeginVersion, int snapshotFileCount, Version fileVersion, int blockSize) override {
std::string fileName = format("range,%" PRId64 ",%s,%d", fileVersion, deterministicRandom()->randomUniqueID().toString().c_str(), blockSize); std::string fileName = format("range,%" PRId64 ",%s,%d", fileVersion, deterministicRandom()->randomUniqueID().toString().c_str(), blockSize);
// In order to test backward compatibility in simulation, sometimes write to the old path format // In order to test backward compatibility in simulation, sometimes write to the old path format
@ -495,7 +495,7 @@ public:
return Void(); return Void();
} }
Future<Void> writeKeyspaceSnapshotFile(std::vector<std::string> fileNames, int64_t totalBytes) { Future<Void> writeKeyspaceSnapshotFile(std::vector<std::string> fileNames, int64_t totalBytes) override {
return writeKeyspaceSnapshotFile_impl(Reference<BackupContainerFileSystem>::addRef(this), fileNames, totalBytes); return writeKeyspaceSnapshotFile_impl(Reference<BackupContainerFileSystem>::addRef(this), fileNames, totalBytes);
}; };
@ -612,7 +612,7 @@ public:
return BackupFileList({fRanges.get(), fLogs.get(), fSnapshots.get()}); return BackupFileList({fRanges.get(), fLogs.get(), fSnapshots.get()});
} }
Future<BackupFileList> dumpFileList(Version begin, Version end) { Future<BackupFileList> dumpFileList(Version begin, Version end) override {
return dumpFileList_impl(Reference<BackupContainerFileSystem>::addRef(this), begin, end); return dumpFileList_impl(Reference<BackupContainerFileSystem>::addRef(this), begin, end);
} }
@ -829,7 +829,7 @@ public:
} }
// Uses the virtual methods to describe the backup contents // Uses the virtual methods to describe the backup contents
Future<BackupDescription> describeBackup(bool deepScan, Version logStartVersionOverride) { Future<BackupDescription> describeBackup(bool deepScan, Version logStartVersionOverride) override {
return describeBackup_impl(Reference<BackupContainerFileSystem>::addRef(this), deepScan, logStartVersionOverride); return describeBackup_impl(Reference<BackupContainerFileSystem>::addRef(this), deepScan, logStartVersionOverride);
} }
@ -1009,7 +1009,7 @@ public:
} }
// Delete all data up to (but not including endVersion) // Delete all data up to (but not including endVersion)
Future<Void> expireData(Version expireEndVersion, bool force, ExpireProgress *progress, Version restorableBeginVersion) { Future<Void> expireData(Version expireEndVersion, bool force, ExpireProgress *progress, Version restorableBeginVersion) override {
return expireData_impl(Reference<BackupContainerFileSystem>::addRef(this), expireEndVersion, force, progress, restorableBeginVersion); return expireData_impl(Reference<BackupContainerFileSystem>::addRef(this), expireEndVersion, force, progress, restorableBeginVersion);
} }
@ -1067,7 +1067,7 @@ public:
return Optional<RestorableFileSet>(); return Optional<RestorableFileSet>();
} }
Future<Optional<RestorableFileSet>> getRestoreSet(Version targetVersion){ Future<Optional<RestorableFileSet>> getRestoreSet(Version targetVersion) override {
return getRestoreSet_impl(Reference<BackupContainerFileSystem>::addRef(this), targetVersion); return getRestoreSet_impl(Reference<BackupContainerFileSystem>::addRef(this), targetVersion);
} }
@ -1152,8 +1152,8 @@ public:
class BackupContainerLocalDirectory : public BackupContainerFileSystem, ReferenceCounted<BackupContainerLocalDirectory> { class BackupContainerLocalDirectory : public BackupContainerFileSystem, ReferenceCounted<BackupContainerLocalDirectory> {
public: public:
void addref() { return ReferenceCounted<BackupContainerLocalDirectory>::addref(); } void addref() override { return ReferenceCounted<BackupContainerLocalDirectory>::addref(); }
void delref() { return ReferenceCounted<BackupContainerLocalDirectory>::delref(); } void delref() override { return ReferenceCounted<BackupContainerLocalDirectory>::delref(); }
static std::string getURLFormat() { return "file://</path/to/base/dir/>"; } static std::string getURLFormat() { return "file://</path/to/base/dir/>"; }
@ -1202,7 +1202,7 @@ public:
return results; return results;
} }
Future<Void> create() { Future<Void> create() override {
// Nothing should be done here because create() can be called by any process working with the container URL, such as fdbbackup. // Nothing should be done here because create() can be called by any process working with the container URL, such as fdbbackup.
// Since "local directory" containers are by definition local to the machine they are accessed from, // Since "local directory" containers are by definition local to the machine they are accessed from,
// the container's creation (in this case the creation of a directory) must be ensured prior to every file creation, // the container's creation (in this case the creation of a directory) must be ensured prior to every file creation,
@ -1212,11 +1212,11 @@ public:
} }
// The container exists if the folder it resides in exists // The container exists if the folder it resides in exists
Future<bool> exists() { Future<bool> exists() override {
return directoryExists(m_path); return directoryExists(m_path);
} }
Future<Reference<IAsyncFile>> readFile(std::string path) { Future<Reference<IAsyncFile>> readFile(std::string path) override {
int flags = IAsyncFile::OPEN_NO_AIO | IAsyncFile::OPEN_READONLY | IAsyncFile::OPEN_UNCACHED; int flags = IAsyncFile::OPEN_NO_AIO | IAsyncFile::OPEN_READONLY | IAsyncFile::OPEN_UNCACHED;
// Simulation does not properly handle opening the same file from multiple machines using a shared filesystem, // Simulation does not properly handle opening the same file from multiple machines using a shared filesystem,
// so create a symbolic link to make each file opening appear to be unique. This could also work in production // so create a symbolic link to make each file opening appear to be unique. This could also work in production
@ -1285,15 +1285,15 @@ public:
return finish_impl(Reference<BackupFile>::addRef(this)); return finish_impl(Reference<BackupFile>::addRef(this));
} }
void addref() { return ReferenceCounted<BackupFile>::addref(); } void addref() override { return ReferenceCounted<BackupFile>::addref(); }
void delref() { return ReferenceCounted<BackupFile>::delref(); } void delref() override { return ReferenceCounted<BackupFile>::delref(); }
private: private:
Reference<IAsyncFile> m_file; Reference<IAsyncFile> m_file;
std::string m_finalFullPath; std::string m_finalFullPath;
}; };
Future<Reference<IBackupFile>> writeFile(std::string path) { Future<Reference<IBackupFile>> writeFile(std::string path) override {
int flags = IAsyncFile::OPEN_NO_AIO | IAsyncFile::OPEN_CREATE | IAsyncFile::OPEN_ATOMIC_WRITE_AND_CREATE | IAsyncFile::OPEN_READWRITE; int flags = IAsyncFile::OPEN_NO_AIO | IAsyncFile::OPEN_CREATE | IAsyncFile::OPEN_ATOMIC_WRITE_AND_CREATE | IAsyncFile::OPEN_READWRITE;
std::string fullPath = joinPath(m_path, path); std::string fullPath = joinPath(m_path, path);
platform::createDirectory(parentDirectory(fullPath)); platform::createDirectory(parentDirectory(fullPath));
@ -1304,7 +1304,7 @@ public:
}); });
} }
Future<Void> deleteFile(std::string path) { Future<Void> deleteFile(std::string path) override {
::deleteFile(joinPath(m_path, path)); ::deleteFile(joinPath(m_path, path));
return Void(); return Void();
} }
@ -1329,7 +1329,7 @@ public:
return results; return results;
} }
Future<Void> deleteContainer(int *pNumDeleted) { Future<Void> deleteContainer(int* pNumDeleted) override {
// In order to avoid deleting some random directory due to user error, first describe the backup // In order to avoid deleting some random directory due to user error, first describe the backup
// and make sure it has something in it. // and make sure it has something in it.
return map(describeBackup(false, invalidVersion), [=](BackupDescription const &desc) { return map(describeBackup(false, invalidVersion), [=](BackupDescription const &desc) {
@ -1389,8 +1389,8 @@ public:
} }
} }
void addref() { return ReferenceCounted<BackupContainerBlobStore>::addref(); } void addref() override { return ReferenceCounted<BackupContainerBlobStore>::addref(); }
void delref() { return ReferenceCounted<BackupContainerBlobStore>::delref(); } void delref() override { return ReferenceCounted<BackupContainerBlobStore>::delref(); }
static std::string getURLFormat() { static std::string getURLFormat() {
return BlobStoreEndpoint::getURLFormat(true) + " (Note: The 'bucket' parameter is required.)"; return BlobStoreEndpoint::getURLFormat(true) + " (Note: The 'bucket' parameter is required.)";
@ -1398,7 +1398,7 @@ public:
virtual ~BackupContainerBlobStore() {} virtual ~BackupContainerBlobStore() {}
Future<Reference<IAsyncFile>> readFile(std::string path) { Future<Reference<IAsyncFile>> readFile(std::string path) override {
return Reference<IAsyncFile>( return Reference<IAsyncFile>(
new AsyncFileReadAheadCache( new AsyncFileReadAheadCache(
Reference<IAsyncFile>(new AsyncFileBlobStoreRead(m_bstore, m_bucket, dataPath(path))), Reference<IAsyncFile>(new AsyncFileBlobStoreRead(m_bstore, m_bucket, dataPath(path))),
@ -1435,17 +1435,17 @@ public:
return map(m_file->sync(), [=](Void _) { self->m_file.clear(); return Void(); }); return map(m_file->sync(), [=](Void _) { self->m_file.clear(); return Void(); });
} }
void addref() { return ReferenceCounted<BackupFile>::addref(); } void addref() override { return ReferenceCounted<BackupFile>::addref(); }
void delref() { return ReferenceCounted<BackupFile>::delref(); } void delref() override { return ReferenceCounted<BackupFile>::delref(); }
private: private:
Reference<IAsyncFile> m_file; Reference<IAsyncFile> m_file;
}; };
Future<Reference<IBackupFile>> writeFile(std::string path) { Future<Reference<IBackupFile>> writeFile(std::string path) override {
return Reference<IBackupFile>(new BackupFile(path, Reference<IAsyncFile>(new AsyncFileBlobStoreWrite(m_bstore, m_bucket, dataPath(path))))); return Reference<IBackupFile>(new BackupFile(path, Reference<IAsyncFile>(new AsyncFileBlobStoreWrite(m_bstore, m_bucket, dataPath(path)))));
} }
Future<Void> deleteFile(std::string path) { Future<Void> deleteFile(std::string path) override {
return m_bstore->deleteObject(m_bucket, dataPath(path)); return m_bstore->deleteObject(m_bucket, dataPath(path));
} }
@ -1483,12 +1483,12 @@ public:
return Void(); return Void();
} }
Future<Void> create() { Future<Void> create() override {
return create_impl(Reference<BackupContainerBlobStore>::addRef(this)); return create_impl(Reference<BackupContainerBlobStore>::addRef(this));
} }
// The container exists if the index entry in the blob bucket exists // The container exists if the index entry in the blob bucket exists
Future<bool> exists() { Future<bool> exists() override {
return m_bstore->objectExists(m_bucket, indexEntry()); return m_bstore->objectExists(m_bucket, indexEntry());
} }
@ -1508,7 +1508,7 @@ public:
return Void(); return Void();
} }
Future<Void> deleteContainer(int *pNumDeleted) { Future<Void> deleteContainer(int* pNumDeleted) override {
return deleteContainer_impl(Reference<BackupContainerBlobStore>::addRef(this), pNumDeleted); return deleteContainer_impl(Reference<BackupContainerBlobStore>::addRef(this), pNumDeleted);
} }