Skip to content

Commit b967513

Browse files
Fix: db entry replay initialize. (infiniflow#783)
### What problem does this PR solve? Database replay initialize bug. ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) Co-authored-by: Jin Hai <haijin.chn@gmail.com>
1 parent 46c737c commit b967513

File tree

4 files changed

+15
-16
lines changed

4 files changed

+15
-16
lines changed

src/storage/meta/catalog.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ UniquePtr<Catalog> Catalog::NewCatalog(SharedPtr<String> dir, bool create_defaul
357357
Path parent_path = catalog_path.parent_path();
358358
auto data_dir = MakeShared<String>(parent_path.string());
359359
UniquePtr<DBMeta> db_meta = MakeUnique<DBMeta>(data_dir, MakeShared<String>("default"));
360-
UniquePtr<DBEntry> db_entry = MakeUnique<DBEntry>(db_meta.get(), false, db_meta->data_dir(), db_meta->db_name(), 0, 0);
360+
SharedPtr<DBEntry> db_entry = DBEntry::NewDBEntry(db_meta.get(), false, db_meta->data_dir(), db_meta->db_name(), 0, 0);
361361
// TODO commit ts == 0 is true??
362362
db_entry->commit_ts_ = 0;
363363
db_meta->db_entry_list().emplace_front(std::move(db_entry));
@@ -471,9 +471,10 @@ void Catalog::LoadFromEntry(Catalog *catalog, const String &catalog_path, Buffer
471471
case CatalogDeltaOpType::ADD_DATABASE_ENTRY: {
472472
auto add_db_entry_op = static_cast<AddDBEntryOp *>(op.get());
473473
auto db_name = add_db_entry_op->db_name();
474-
474+
const auto &db_entry_dir = add_db_entry_op->db_entry_dir();
475475
auto db_meta = catalog->db_meta_map().at(db_name).get();
476-
auto db_entry = DBEntry::NewReplayDBEntry(db_meta, db_meta->data_dir_, db_meta->db_name_, txn_id, begin_ts, commit_ts, is_delete);
476+
auto db_entry =
477+
DBEntry::NewReplayDBEntry(db_meta, MakeShared<String>(db_entry_dir), db_meta->db_name_, txn_id, begin_ts, commit_ts, is_delete);
477478
db_meta->db_entry_list().emplace_front(std::move(db_entry));
478479
break;
479480
}
@@ -846,9 +847,7 @@ UniquePtr<String> Catalog::SaveFullCatalog(const String &catalog_dir, TxnTimeSta
846847
// called by bg_task
847848
bool Catalog::SaveDeltaCatalog(const String &delta_catalog_path, TxnTimeStamp max_commit_ts) {
848849
LOG_INFO("SAVING DELTA CATALOG");
849-
LOG_INFO(fmt::format("Save delta catalog commit ts:{}, checkpoint max commit ts:{}.",
850-
global_catalog_delta_entry_->commit_ts(),
851-
max_commit_ts));
850+
LOG_INFO(fmt::format("Save delta catalog commit ts:{}, checkpoint max commit ts:{}.", global_catalog_delta_entry_->commit_ts(), max_commit_ts));
852851

853852
// Check the SegmentEntry's for flush the data to disk.
854853
UniquePtr<CatalogDeltaEntry> flush_delta_entry = global_catalog_delta_entry_->PickFlushEntry(max_commit_ts);

src/storage/meta/entry/db_entry.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,13 @@ namespace infinity {
3939

4040
DBEntry::DBEntry(DBMeta *db_meta,
4141
bool is_delete,
42-
const SharedPtr<String> &data_dir,
42+
const SharedPtr<String> &db_entry_dir,
4343
const SharedPtr<String> &db_name,
4444
TransactionID txn_id,
4545
TxnTimeStamp begin_ts)
4646
// "data_dir": "/tmp/infinity/data"
4747
// "db_entry_dir": "/tmp/infinity/data/db1/txn_6"
48-
: BaseEntry(EntryType::kDatabase, is_delete), db_meta_(db_meta), db_entry_dir_(is_delete ? nullptr : DetermineDBDir(*data_dir, *db_name)),
49-
db_name_(db_name) {
48+
: BaseEntry(EntryType::kDatabase, is_delete), db_meta_(db_meta), db_entry_dir_(db_entry_dir), db_name_(db_name) {
5049
// atomic_u64 txn_id_{0};
5150
// TxnTimeStamp begin_ts_{0};
5251
// atomic_u64 commit_ts_{UNCOMMIT_TS};
@@ -61,18 +60,19 @@ SharedPtr<DBEntry> DBEntry::NewDBEntry(DBMeta *db_meta,
6160
const SharedPtr<String> &db_name,
6261
TransactionID txn_id,
6362
TxnTimeStamp begin_ts) {
64-
auto db_entry = MakeShared<DBEntry>(db_meta, is_delete, data_dir, db_name, txn_id, begin_ts);
63+
SharedPtr<String> db_entry_dir = is_delete ? nullptr : DetermineDBDir(*data_dir, *db_name);
64+
auto db_entry = MakeShared<DBEntry>(db_meta, is_delete, db_entry_dir, db_name, txn_id, begin_ts);
6565
return db_entry;
6666
}
6767

6868
SharedPtr<DBEntry> DBEntry::NewReplayDBEntry(DBMeta *db_meta,
69-
const SharedPtr<String> &data_dir,
69+
const SharedPtr<String> &db_entry_dir,
7070
const SharedPtr<String> &db_name,
7171
TransactionID txn_id,
7272
TxnTimeStamp begin_ts,
7373
TxnTimeStamp commit_ts,
7474
bool is_delete) noexcept {
75-
auto db_entry = MakeShared<DBEntry>(db_meta, is_delete, data_dir, db_name, txn_id, begin_ts);
75+
auto db_entry = MakeShared<DBEntry>(db_meta, is_delete, db_entry_dir, db_name, txn_id, begin_ts);
7676
db_entry->commit_ts_ = commit_ts;
7777
return db_entry;
7878
}
@@ -203,7 +203,7 @@ UniquePtr<DBEntry> DBEntry::Deserialize(const nlohmann::json &db_entry_json, DBM
203203
u64 begin_ts = db_entry_json["begin_ts"];
204204

205205
SharedPtr<String> db_entry_dir{};
206-
if(!deleted) {
206+
if (!deleted) {
207207
db_entry_dir = MakeShared<String>(db_entry_json["db_entry_dir"]);
208208
}
209209
UniquePtr<DBEntry> res = MakeUnique<DBEntry>(db_meta, deleted, db_entry_dir, db_name, txn_id, begin_ts);

src/storage/meta/entry/db_entry.cppm

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public:
4646

4747
explicit DBEntry(DBMeta *db_meta,
4848
bool is_delete,
49-
const SharedPtr<String> &data_dir,
49+
const SharedPtr<String> &db_entry_dir,
5050
const SharedPtr<String> &db_name,
5151
TransactionID txn_id,
5252
TxnTimeStamp begin_ts);
@@ -59,7 +59,7 @@ public:
5959
TxnTimeStamp begin_ts);
6060

6161
static SharedPtr<DBEntry> NewReplayDBEntry(DBMeta *db_meta,
62-
const SharedPtr<String> &data_dir,
62+
const SharedPtr<String> &db_entry_dir,
6363
const SharedPtr<String> &db_name,
6464
TransactionID txn_id,
6565
TxnTimeStamp begin_ts,

src/storage/wal/catalog_delta_entry.cppm

+1-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public:
220220

221221
public:
222222
const String &db_name() const { return db_name_; }
223-
const String &data_dir() const { return db_entry_dir_; }
223+
const String &db_entry_dir() const { return db_entry_dir_; }
224224

225225
public:
226226
SharedPtr<DBEntry> db_entry_{};

0 commit comments

Comments
 (0)