Skip to content

Commit

Permalink
WIP: dblogutilsのLOG-0.6対応
Browse files Browse the repository at this point in the history
  • Loading branch information
umegane committed Aug 22, 2024
1 parent 9d54310 commit 0519971
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 3 deletions.
58 changes: 58 additions & 0 deletions docs/internal/tglogutils_for_log-0.6.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,3 +300,61 @@ MAX_EPOCH_ID 0



## 対応状況

### 未対応

* おそらくdetached pwalがオフラインコンパクションの対象になっている。
* たんにローテーションしただけのPWALはオフラインコンパクションの対象
* コンパクション済みのPWALは、コンパクションの対象外
* オフラインコンパクションが遅くなる
* 一部のファイルだけデタッチしている場合に、データが破損する可能性がある。
* オフラインコンパクションの対象外にすべき
* inspectについては、議論の余地がある。
* 現在の使用だと、detached pwalは対象外にすべき
* detached pwalの破損を調べられないのは、制限事項とする。
* inspectで表示される、persistent-format-version:が不正 => マニフェストファイルを見ていないのではないか


* コンパクションにより、エポックIDが0になることに起因する問題。
* => 実際には、オフラインコンパクションを行うとコンパクションカタログのエポックIDが0になるという問題だった。
* オフラインコンパクションを行ったときに、コピー先にepcho_idが0のコンパクションカタログが生成される。
* その後、コンパクションカタログに対する操作が行われずに、残っていた。
* 必要な対応
* from ディレクトリの version確認
* version2の場合、コンパクションカタログを読み、コンパクション対象がファイルを取得
* コンパクション対象外ファイルをコンパクションする
* コンパクションカタログをアップデートする。

* tglogutilsを用いたとき、ターゲットディレクトリを無条件にv1からv2にアップグレードしてしまう。



### LOG-0.6では対応しない

* ローテート済みのPWALとコンパクション済みのPWALがrepairの対象にならない
* こららのファイルが破損したときに修復ができない


### 終了済み

* 意図したファイルがローテーションされたかtsurugidbのログで確認できない。
* 現状でも次のログが出ているので確認可能

```
I0822 18:41:39.092664 161657 parse_wal_file.cpp:212] /:limestone:internal:dblog_scan:scan_one_pwal_file processing pwal file: pwal_0000.01724319699070.0
I0822 18:41:39.092842 161656 parse_wal_file.cpp:212] /:limestone:internal:dblog_scan:scan_one_pwal_file processing pwal file: pwal_0001.01724319699070.0
I0822 18:41:39.092876 161658 parse_wal_file.cpp:212] /:limestone:internal:dblog_scan:scan_one_pwal_file processing pwal file: pwal_0002.01724319699070.0
I0822 18:41:39.092902 161659 parse_wal_file.cpp:212] /:limestone:internal:dblog_scan:scan_one_pwal_file processing pwal file: pwal_0003.01724319699070.0
I0822 18:41:39.139019 161659 parse_wal_file.cpp:477] /:limestone:internal:dblog_scan:scan_one_pwal_file fixed: 0
I0822 18:41:39.139031 161659 dblog_scan.cpp:138] OK: "/home/umegane/tsurugi/tsurugi/var/data/log/pwal_0003.01724319699070.0"
I0822 18:41:39.257598 161658 parse_wal_file.cpp:477] /:limestone:internal:dblog_scan:scan_one_pwal_file fixed: 0
I0822 18:41:39.257611 161658 dblog_scan.cpp:138] OK: "/home/umegane/tsurugi/tsurugi/var/data/log/pwal_0002.01724319699070.0"
I0822 18:41:39.264319 161656 parse_wal_file.cpp:477] /:limestone:internal:dblog_scan:scan_one_pwal_file fixed: 0
I0822 18:41:39.264328 161656 dblog_scan.cpp:138] OK: "/home/umegane/tsurugi/tsurugi/var/data/log/pwal_0001.01724319699070.0"
I0822 18:41:39.265872 161657 parse_wal_file.cpp:477] /:limestone:internal:dblog_scan:scan_one_pwal_file fixed: 0
I0822 18:41:39.265877 161657 dblog_scan.cpp:138] OK: "/home/umegane/tsurugi/tsurugi/var/data/log/pwal_0000.01724319699070.0"
I0822 18:41:39.266139 160984 datastore_snapshot.cpp:205] /:limestone:internal:create_compact_pwal generating compacted pwal file: "/home/umegane/tsurugi/tsurugi/var/data/log/compaction_temp/pwal_0000.compacted"
```


19 changes: 16 additions & 3 deletions src/limestone/dblogutil/dblogutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "internal.h"
#include "log_entry.h"


using namespace limestone::api;
using namespace limestone::internal;

Expand Down Expand Up @@ -181,7 +182,7 @@ static boost::filesystem::path make_backup_dir_next_to(const boost::filesystem::
return make_tmp_dir_next_to(target_dir, ".backup_XXXXXX");
}

void compaction(dblog_scan &ds, std::optional<epoch_id_type> epoch) {
void compaction(dblog_scan &ds, std::optional<epoch_id_type> epoch, compaction_catalog &catalog) {
epoch_id_type ld_epoch{};
if (epoch.has_value()) {
ld_epoch = epoch.value();
Expand Down Expand Up @@ -260,6 +261,9 @@ void compaction(dblog_scan &ds, std::optional<epoch_id_type> epoch) {
VLOG_LP(log_info) << "renaming " << tmp << " to " << from_dir;
boost::filesystem::rename(tmp, from_dir);

std::set<compacted_file_info> compacted_files = {compacted_file_info(catalog.get_compacted_filename(), 1)};

Check warning on line 264 in src/limestone/dblogutil/dblogutil.cpp

View workflow job for this annotation

GitHub Actions / Clang-Tidy

readability-static-accessed-through-instance

static member accessed through instance
std::set<std::string> detached_pwals;
catalog.update_catalog_file(ld_epoch, compacted_files, detached_pwals);
std::cout << "compaction was successfully completed: " << from_dir << std::endl;
}

Expand Down Expand Up @@ -293,11 +297,20 @@ int main(char *dir, subcommand mode) { // NOLINT
}
try {
check_and_migrate_logdir_format(p);
dblog_scan ds(p);
compaction_catalog catalog = compaction_catalog::from_catalog_file(p);
const auto& detached_pwals = catalog.get_detached_pwals();
std::set<std::string> non_detached_files;
for (const auto& entry : boost::filesystem::directory_iterator(p)) {
auto file_name = entry.path().filename().string();
if (detached_pwals.find(file_name) == detached_pwals.end()) {
non_detached_files.insert(file_name);
}
}
dblog_scan ds(p, non_detached_files);
ds.set_thread_num(FLAGS_thread_num);
if (mode == cmd_inspect) inspect(ds, opt_epoch);
if (mode == cmd_repair) repair(ds, opt_epoch);
if (mode == cmd_compaction) compaction(ds, opt_epoch);
if (mode == cmd_compaction) compaction(ds, opt_epoch, catalog);
} catch (std::runtime_error& e) {
LOG(ERROR) << e.what();
log_and_exit(64);
Expand Down

0 comments on commit 0519971

Please sign in to comment.