| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Copyright (c) Meta Platforms, Inc. and affiliates.
- //
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #include "db/manifest_ops.h"
- #include "file/filename.h"
- namespace ROCKSDB_NAMESPACE {
- Status GetCurrentManifestPath(const std::string& dbname, FileSystem* fs,
- bool is_retry, std::string* manifest_path,
- uint64_t* manifest_file_number) {
- assert(fs != nullptr);
- assert(manifest_path != nullptr);
- assert(manifest_file_number != nullptr);
- IOOptions opts;
- std::string fname;
- if (is_retry) {
- opts.verify_and_reconstruct_read = true;
- }
- Status s = ReadFileToString(fs, CurrentFileName(dbname), opts, &fname);
- if (!s.ok()) {
- return s;
- }
- if (fname.empty() || fname.back() != '\n') {
- return Status::Corruption("CURRENT file does not end with newline");
- }
- // remove the trailing '\n'
- fname.resize(fname.size() - 1);
- FileType type;
- bool parse_ok = ParseFileName(fname, manifest_file_number, &type);
- if (!parse_ok || type != kDescriptorFile) {
- return Status::Corruption("CURRENT file corrupted");
- }
- *manifest_path = dbname;
- if (dbname.back() != '/') {
- manifest_path->push_back('/');
- }
- manifest_path->append(fname);
- return Status::OK();
- }
- } // namespace ROCKSDB_NAMESPACE
|