MCPcopy Create free account
hub / github.com/ElementsProject/elements / Open

Method Open

src/leveldb/db/db_impl.cc:1479–1520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1477DB::~DB() = default;
1478
1479Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr) {
1480 *dbptr = nullptr;
1481
1482 DBImpl* impl = new DBImpl(options, dbname);
1483 impl->mutex_.Lock();
1484 VersionEdit edit;
1485 // Recover handles create_if_missing, error_if_exists
1486 bool save_manifest = false;
1487 Status s = impl->Recover(&edit, &save_manifest);
1488 if (s.ok() && impl->mem_ == nullptr) {
1489 // Create new log and a corresponding memtable.
1490 uint64_t new_log_number = impl->versions_->NewFileNumber();
1491 WritableFile* lfile;
1492 s = options.env->NewWritableFile(LogFileName(dbname, new_log_number),
1493 &lfile);
1494 if (s.ok()) {
1495 edit.SetLogNumber(new_log_number);
1496 impl->logfile_ = lfile;
1497 impl->logfile_number_ = new_log_number;
1498 impl->log_ = new log::Writer(lfile);
1499 impl->mem_ = new MemTable(impl->internal_comparator_);
1500 impl->mem_->Ref();
1501 }
1502 }
1503 if (s.ok() && save_manifest) {
1504 edit.SetPrevLogNumber(0); // No older logs needed after recovery.
1505 edit.SetLogNumber(impl->logfile_number_);
1506 s = impl->versions_->LogAndApply(&edit, &impl->mutex_);
1507 }
1508 if (s.ok()) {
1509 impl->DeleteObsoleteFiles();
1510 impl->MaybeScheduleCompaction();
1511 }
1512 impl->mutex_.Unlock();
1513 if (s.ok()) {
1514 assert(impl->mem_ != nullptr);
1515 *dbptr = impl;
1516 } else {
1517 delete impl;
1518 }
1519 return s;
1520}
1521
1522Snapshot::~Snapshot() = default;
1523

Callers

nothing calls this directly

Calls 12

LogFileNameFunction · 0.85
LockMethod · 0.80
NewFileNumberMethod · 0.80
SetLogNumberMethod · 0.80
SetPrevLogNumberMethod · 0.80
LogAndApplyMethod · 0.80
DeleteObsoleteFilesMethod · 0.80
UnlockMethod · 0.80
RecoverMethod · 0.45
NewWritableFileMethod · 0.45
RefMethod · 0.45

Tested by

no test coverage detected