diff --git a/src/durability/paths.cpp b/src/durability/paths.cpp index ec851ee6a..a3254db3a 100644 --- a/src/durability/paths.cpp +++ b/src/durability/paths.cpp @@ -69,11 +69,13 @@ std::experimental::optional<tx::transaction_id_t> TransactionIdFromWalFilename( } } -fs::path MakeSnapshotPath(const fs::path &durability_dir, const int worker_id) { +fs::path MakeSnapshotPath(const fs::path &durability_dir, const int worker_id, + tx::transaction_id_t tx_id) { std::string date_str = Timestamp(Timestamp::Now()) .ToString("{:04d}_{:02d}_{:02d}__{:02d}_{:02d}_{:02d}_{:05d}"); - auto file_name = date_str + "_worker_" + std::to_string(worker_id); + auto file_name = date_str + "_worker_" + std::to_string(worker_id) + "_tx_" + + std::to_string(tx_id); return durability_dir / kSnapshotDir / file_name; } diff --git a/src/durability/paths.hpp b/src/durability/paths.hpp index 6790d84c4..7716016f0 100644 --- a/src/durability/paths.hpp +++ b/src/durability/paths.hpp @@ -26,9 +26,11 @@ std::experimental::optional<tx::transaction_id_t> TransactionIdFromWalFilename( const std::string &name); /** Generates a path for a DB snapshot in the given folder in a well-defined - * sortable format with worker id appended to the file name. */ + * sortable format with worker id and transaction from which the snapshot is + * created appended to the file name. */ std::experimental::filesystem::path MakeSnapshotPath( - const std::experimental::filesystem::path &durability_dir, int worker_id); + const std::experimental::filesystem::path &durability_dir, int worker_id, + tx::transaction_id_t tx_id); /// Generates a file path for a write-ahead log file of a specified worker. If /// given a transaction ID the file name will contain it. Otherwise the file diff --git a/src/durability/snapshooter.cpp b/src/durability/snapshooter.cpp index f4ce972db..0327e8f8e 100644 --- a/src/durability/snapshooter.cpp +++ b/src/durability/snapshooter.cpp @@ -119,10 +119,11 @@ void RemoveOldWals(const fs::path &wal_dir, bool MakeSnapshot(database::GraphDb &db, const fs::path &durability_dir, const int snapshot_max_retained) { - if (!EnsureDir(durability_dir / kSnapshotDir)) return false; - const auto snapshot_file = MakeSnapshotPath(durability_dir, db.WorkerId()); - if (fs::exists(snapshot_file)) return false; database::GraphDbAccessor dba(db); + if (!EnsureDir(durability_dir / kSnapshotDir)) return false; + const auto snapshot_file = + MakeSnapshotPath(durability_dir, db.WorkerId(), dba.transaction_id()); + if (fs::exists(snapshot_file)) return false; if (Encode(snapshot_file, db, dba)) { RemoveOldSnapshots(durability_dir / kSnapshotDir, snapshot_max_retained); RemoveOldWals(durability_dir / kWalDir, dba.transaction()); diff --git a/tests/manual/snapshot_generation/snapshot_writer.hpp b/tests/manual/snapshot_generation/snapshot_writer.hpp index 579527ad0..62a3ea6a8 100644 --- a/tests/manual/snapshot_generation/snapshot_writer.hpp +++ b/tests/manual/snapshot_generation/snapshot_writer.hpp @@ -119,8 +119,10 @@ void WriteToSnapshot(GraphState &state, const std::string &path) { LOG(ERROR) << "Unable to create durability directory!"; exit(0); } + // Pretend like this is coming from transaction numbered 1 - this is hack + // TODO(dgleich): Change this to something more reasonable const auto snapshot_file = - durability::MakeSnapshotPath(durability_dir, worker_id); + durability::MakeSnapshotPath(durability_dir, worker_id, 1); SnapshotWriter writer(snapshot_file, worker_id, state.NumNodesOnWorker(worker_id), diff --git a/tools/src/mg_import_csv/main.cpp b/tools/src/mg_import_csv/main.cpp index 3d544dea5..47a7a3339 100644 --- a/tools/src/mg_import_csv/main.cpp +++ b/tools/src/mg_import_csv/main.cpp @@ -470,7 +470,9 @@ std::string GetOutputPath() { LOG(FATAL) << error.what(); } int worker_id = 0; - return std::string(durability::MakeSnapshotPath(durability_dir, worker_id)); + // TODO(dgleich): Remove this transaction id hack + return std::string( + durability::MakeSnapshotPath(durability_dir, worker_id, 1)); } int main(int argc, char *argv[]) {